html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
html5中meter講解
得墨meter耳定律(也稱為最少知識定律)是一種編碼原理,它表示模塊不應該知道其操作的對象的內部細節。 如果代碼取決于特定對象的內部細節,則很有可能一旦該對象的內部發生更改,它就會中斷。 由于封裝是關于隱藏對象的內部細節并僅公開操作的,因此它也聲明了Demeter定律 。 許多Java程序員都犯了一個錯誤,那就是它使用getter方法公開了對象的內部細節,而這正是知識最少的原則提醒您的地方。 在閱讀一本必讀的編程書 《羅伯特·C·馬丁的清潔代碼》時 ,我首先了解了這一原理。 除了本書教給您的許多好處之外, “最起碼的原則”是一個原則,我至今仍然記得。 像許多壞事一樣,由于以流利的方式編寫的方法的優美鏈接,您將極力違反《德米特律法》。 從表面上看,它看起來不錯,但是一旦您想到了最少知識的原理,您就會開始看到真實的圖畫。 在本文中,我們將看到Demeter定律的正式定義,并探索違反該原理的代碼段。
根據Demeter定律,對象O的方法M應該僅調用以下類型的方法:
更重要的是,方法不應在上面指定的任何后續方法調用返回的對象上調用方法,正如Clean Code所說的“與朋友交談,而不是與陌生人交談”。 除了了解面向對象編程的基本概念(例如抽象 , 多態 , 繼承和SOLID設計原理)外 ,還值得了解像這樣的有用原理,它是通過經驗發現的。 在下面的示例中,我們將看到一種方法如何違反上述規則以違反定界符定律。
public class LawOfDelimterDemo {/*** This method shows two violations of "Law of Delimiter" or "Principle of least knowledge".*/public void process(Order o) {// as per rule 1, this method invocation is fine, because o is a argument of process() methodMessage msg = o.getMessage();// this method call is a violation, as we are using msg, which we got from Order.// We should ask order to normalize message, e.g. "o.normalizeMessage();"msg.normalize();// this is also a violation, instead using temporary variable it uses method chain.o.getMessage().normalize();// this is OK, a constructor call, not a method call.Instrument symbol = new Instrument();// as per rule 4, this method call is OK, because instance of Instrument is created locally.symbol.populate(); } }您可以看到,當我們獲取Order類的內部并在該對象上調用方法時,便違反了delimiter的Law ,因為現在此方法知道Message類。 另一方面,調用Order對象的方法很好,因為它作為參數傳遞給了該方法。 此圖像很好地說明了遵循Demeter定律需要做什么。
讓我們看看另一個違反Demeter法則的代碼示例,它如何影響代碼質量。
public class XMLUtils {public Country getFirstBookCategoryFromXML(XMLMessage xml) { return xml.getXML().getBooks().getBookArrary(0).getBookHeader().getBookCategory();} } 現在,此代碼取決于許多類,例如
XML消息
XML格式 書 書頭 圖書類別
這意味著此函數了解XMLMessage,XML,Book,BookHeader和BookCategory。 它知道XML具有
Book,依次具有BookHeader和內部具有BookCategory,這是很多信息。 如果此鏈接方法調用中的任何中間類或訪問器方法發生更改,則此代碼將中斷。 此代碼高度耦合且脆弱。 最好將查找內部數據的責任放入擁有它的對象中。 如果仔細觀察,應該只調用getXML()方法,因為它的方法來自XMLMessage類,該方法作為參數傳遞給方法。 與其將所有這些代碼都放入XMLUtils中,不如放在BookUtils或類似的東西上,它們仍然可以遵循Demeter的定律并可以返回所需的信息。
翻譯自: https://www.javacodegeeks.com/2014/06/law-of-demeter-in-java-principle-of-least-knowledge-real-life-example.html
html5中meter講解
總結
以上是生活随笔為你收集整理的html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux服务器地址在哪里看(linux
- 下一篇: 千牛安卓版(千牛安卓)