前言 :
Law of Demeter (LoD),最少知識原則 : 一個物件盡可能的少知道其他物件,反之,物件本身提供最少訊息給其他物件。那麼"知識"一詞又是代表何種意義??就是,一個物件本身提供最少的 public variable 及 public method 給外界使用.
狹義的LoD :
若滿足 :
其中之一,則為可以直接溝通的 class ,否則就必須透過第三者來轉發. 由於轉發其他物件的訊息給另一個物件,所以系統中會存在許許多多的小method 作為轉發訊息之用,這也使得設計師在觀察系統的 UML 圖時,會造成困惑,也因為訊息必須透過轉發而不是直接溝通,所以身在兩個遙遠的物件,必須透過多層次的溝通,也就產生了物件之間的不容易協調. 所以 Kirk Knoernschild 在 JAVA Design 一書中提到,為了克服這種狹義的 LoD ,我們可以配合 DIP (Dependency Inversion Principle) 來加入抽象 class,使得兩個不能溝通的物件彼此依賴於此 abstract class.
廣義的LoD :
廣義的 LoD 就是對物件之間的通訊傳輸量的控制,目的為了控制資訊的超載. 在軟體設計中,一個 class 設計的好壞,取決於將自己內部資訊及時做隱藏的程度,透過 information hiding及 encapsulation 來達成. 而運用 LoD 於系統上時必須注意 :
1. 設計系統中的 class 時,應當建構出耦合度越低越好 :
2. 在 class 設計上,應當降低 field 的 Accessibility :
3. 設 class 設計上,只要有可能,就應當將此 class 設計為 immutable class :
immutable class 之五大原則 :
4. 對其他 class 的 reference 上,一個物件對其物件的 reference 應該降到最低 :
補充說明 :
* Dependency Inversion Principle :
Law of Demeter (LoD),最少知識原則 : 一個物件盡可能的少知道其他物件,反之,物件本身提供最少訊息給其他物件。那麼"知識"一詞又是代表何種意義??就是,一個物件本身提供最少的 public variable 及 public method 給外界使用.
狹義的LoD :
若滿足 :
其中之一,則為可以直接溝通的 class ,否則就必須透過第三者來轉發. 由於轉發其他物件的訊息給另一個物件,所以系統中會存在許許多多的小method 作為轉發訊息之用,這也使得設計師在觀察系統的 UML 圖時,會造成困惑,也因為訊息必須透過轉發而不是直接溝通,所以身在兩個遙遠的物件,必須透過多層次的溝通,也就產生了物件之間的不容易協調. 所以 Kirk Knoernschild 在 JAVA Design 一書中提到,為了克服這種狹義的 LoD ,我們可以配合 DIP (Dependency Inversion Principle) 來加入抽象 class,使得兩個不能溝通的物件彼此依賴於此 abstract class.
廣義的LoD :
廣義的 LoD 就是對物件之間的通訊傳輸量的控制,目的為了控制資訊的超載. 在軟體設計中,一個 class 設計的好壞,取決於將自己內部資訊及時做隱藏的程度,透過 information hiding及 encapsulation 來達成. 而運用 LoD 於系統上時必須注意 :
1. 設計系統中的 class 時,應當建構出耦合度越低越好 :
2. 在 class 設計上,應當降低 field 的 Accessibility :
3. 設 class 設計上,只要有可能,就應當將此 class 設計為 immutable class :
immutable class 之五大原則 :
4. 對其他 class 的 reference 上,一個物件對其物件的 reference 應該降到最低 :
補充說明 :
* Dependency Inversion Principle :
沒有留言:
張貼留言