官术网_书友最值得收藏!

2.4 迪米特法則原則

2.4.1 迪米特法則定義

1987年秋天,迪米特法則由美國Northeastern University的Ian Holland提出,被UML的創始者之一Booch等人普及。后來,因為經典著作The Pragmatic Programmer而廣為人知。

迪米特法則(Law of Demeter,LoD)又稱為最少知道原則(Least Knowledge Principle,LKP),是指一個對象類對于其他對象類來說,知道得越少越好。也就是說,兩個類之間不要有過多的耦合關系,保持最少關聯性。

迪米特法則有一句經典語錄:只和朋友通信,不和陌生人說話。也就是說,有內在關聯的類要內聚,沒有直接關系的類要低耦合。這樣的例子在我們生活中也隨處可見,就像家里的水管裝修,有洗衣機地漏、衛生間地漏、廚房地漏,但它們最終都匯到同一個污水處理系統里。在平常使用時,我們不會考慮這些水管是怎么關聯流向的,只需要考慮最上層的使用即可。

2.4.2 模擬場景

本書通過模擬學生、老師、校長之間關系的例子來說明迪米特法則。老師需要負責具體某一個學生的學習情況,而校長會關心老師所在班級的總體成績,不會過問具體某一個學生的學習情況。

下面模擬這樣的例子,如果校長想知道一個班級的總分和平均分,是應該找老師要,還是跟每一個學生要再進行統計呢?顯然是應該找具體的班主任老師。我們在實際開發時,容易忽略這樣的真實情況,開發出邏輯錯誤的程序。

2.4.3 違背原則方案

首先定義一個學生信息類,這個類比較簡單,包括學生姓名、考試排名、總分。在實際的業務開發中會更復雜,這里只是簡化后的類。

之后再定義出老師類,在老師類里初始化學生的信息,以及提供基本的信息獲取接口。

在老師類中初始化了學生信息,同時提供了簡單的接口。接下來定義校長類,校長管理全局,并在校長類中獲取學生人數、總分、平均分等。

以上就是通過校長管理所有學生,老師只提供了非常簡單的信息。雖然可以查詢到結果,但是違背了迪米特法則,因為校長需要了解每個學生的情況。如果所有班級都讓校長類統計,代碼就會變得非常臃腫,也不易于維護和擴展。

2.4.4 迪米特法則改善代碼

從以上的實現方式我們發現,不該讓校長直接管理學生,校長應該管理老師,由老師提供相應的學生信息查詢服務。那么,接下來我們就把校長要的信息交給老師類去處理。

在使用迪米特法則后,把原來違背迪米特法則的服務接口交給老師類處理。這樣每一位老師都會提供相應的功能,校長類只需要調用使用即可,而不需要了解每一位學生的分數。

接下來再看校長類是如何使用的,如下所示。

校長類直接調用老師類的接口,并獲取相應的信息。這樣一來,整個功能邏輯就非常清晰了。

使用單元測試驗證程序結果。

主站蜘蛛池模板: 博兴县| 铜川市| 武隆县| 来凤县| 宁强县| 云林县| 女性| 蓬溪县| 宁阳县| 香格里拉县| 漳浦县| 彩票| 齐齐哈尔市| 沾益县| 潍坊市| 元阳县| 西吉县| 都匀市| 赞皇县| 灌阳县| 新巴尔虎右旗| 大足县| 阆中市| 宽甸| 贵南县| 涟水县| 乌拉特中旗| 邳州市| 健康| 丹棱县| 襄城县| 虹口区| 宁武县| 崇文区| 桂林市| 吉首市| 新干县| 庆元县| 北海市| 驻马店市| 徐水县|