日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

命名对象实体对象_我的对象命名

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 命名对象实体对象_我的对象命名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命名對象實體對象

這是最常見的辯論之一。 大多數人對此主題有自己的見解,卻沒人能真正說出哪個是正確的。 我當然不能,但是盡管如此,我還是決定與大家分享我的想法,投入兩美分,也許對某人會有幫助。

當我創建一個新類時,我要做的第一件事就是設計其接口(如您所知,我相信任何對象都必須實現至少一個接口)。 接口的名稱通常反映對象什么,而不是對象的作用或其他對象應使用的對象。 在極少數情況下,我認為形容詞是合適的,其中之一是Iterable 。

湯姆和杰里–杰里的表哥,威廉·漢娜(William Hanna)和約瑟夫·巴貝拉(Joseph Barbera)

然后是該接口的實現。 由于將來可能會有更多實現,因此我主要根據封裝的細節來命名對象。 因此,假設接口是HttpRequest ,那么如果遵循該接口的第一個對象使用ApacheHttpClient,則其名稱可能是ApacheRequest 。 然后,可能會有另一個實現,與另一個http客戶端(可能是jcabi-http)一起工作 ,在這種情況下,名稱將為JcabiRequest 。

到目前為止,還算不錯,也許沒有什么新鮮的,但是這里有個要注意的地方:根據模式的不同,我自己的類的名稱不一定一定有意義。 例如,在我的一個項目中的某處,您將看到以下類:

/*** Decorator which adds some HTTP headers on the decorated request.*/ public final class HttpHeaders implements HttpRequest {//... }

它本身看起來并不自然,對吧? 好吧,應該很清楚,這種類型的請求永遠都不應該“單獨”使用。 它的構造函數甚至不允許它,因為它應該包裝另一個HttpRequest ,或者另一個包裝器,或者一個具體的請求。 你能想到一個更好的名字嗎? 我相信,在命名一個類時,我們還必須考慮如何使用它,在何種上下文或模式下使用-如果將所有這些名稱放在一起時這些名稱有意義,那么您就可以了。 添加無用的名詞只會導致噪音。

HttpHeaders的用法如下:

Map<String, String> headers = ...;HttpRequest request = new HttpHeaders (new Get(URI.create(...)),headers);

此外,我討厭無用的后綴。 讓我們以最光榮的例子為例:“工廠”。 您是否注意到,當一個對象負責創建其他對象時,不再重要了嗎? 上下文,業務,領域,什么都沒有! 該不良對象的名稱必須帶有后綴“ Factory”,否則代碼將無法工作。

我的代碼中確實有工廠對象,但是“ factory”一詞在任何地方都沒有。 該項目是一個聊天機器人,最頂級的抽象之一是“知識”,機器人知道該怎么做。 知識的每種實現都會創建代表它的步驟樹–機器人需要執行一個或多個步驟才能執行任何命令。 我所謂的“知識”實際上是一個工廠對象,因為它會創建其他對象(這些步驟)。 匯編代碼如下所示:

final Conversation talk = new Conversation(new Hello(new RunScript(new Confused())));talk.start(command);

Conversation , Hello , RunScript和Confused都實現了Knowledge并且它們以級聯機制一起工作,以便找到要執行的正確步驟。 上面的代碼片段翻譯為以下單詞:“對話開始,機器人可以說'你好',為您運行一些腳本,如果它不理解命令,可能會感到困惑”。

現在,這里是相同的代碼片段,但具有更常見的命名:

final StepsFactory factory = new ConversationFactory(new HelloFactory(new RunScriptFactory(new ConfusedFactory())));factory.getSteps(command);

哪一個更好? 它們都將以相同的方式工作,這僅與可讀性有關。 對我而言,這就像是完成的建筑物還是周圍仍然有建筑腳手架的建筑物–沒有人想知道房屋的建造方式,所使用的所有腳手架和儀器,這并不重要。 取而代之的是,每個人都渴望看到最終的構造,并且他們應該了解它的作用,而不要弄清楚實現它的目的。

另一個命名示例:

Log log = new WebLog(new LogFile("/comdor/ActionLogs", this.id),"https://webapps.amihaiemil.com" );

為什么選擇WebLog ? 因為封裝的日志最終將在Web UI上呈現給用戶。 調用log.address() ,字符串“ https://webapps.amihaiemil.com”將與文件名連接在一起以形成有效的URL。 這是WebLog類,您還可以看到Log類型的封裝變量(將顯示給用戶)被命名為“ onServer”,因為它是最終從中獲取的日志文件。服務器。

這幾乎就是我如何處理命名的想法。 而且,當然,我總是寫JavaDocs(如果沒有它們,Maven Central甚至不允許您發布任何內容),因此,如果名稱不夠好,它上面的JavaDoc總是會為您提供幫助。 你怎么看? 您使用什么命名約定?

翻譯自: https://www.javacodegeeks.com/2018/01/take-object-naming.html

命名對象實體對象

總結

以上是生活随笔為你收集整理的命名对象实体对象_我的对象命名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。