當子系統所包含的元素使用另一個子系統所包含之元素的行為時,會在含括子系統之間建立相依性。為了增加重複使用,減少維護相依性,我們想既不透過對於子系統本身的相依性,也不透過對於子系統所包含之元素的相依性,而是透過對於子系統特定介面的相依性來表現這一點。
這有兩方面的原因:
-
只要兩個模型元素(包括子系統)提供相同的行為,我們想要能夠用一個模型元素來替代另一個模型元素。我們透過介面來指定必要的行為,因此,一個模型元素對於另一個模型元素的任何行為需求,都應該透過介面來表現。
-
我們想要讓設計者可以完全自由設計子系統的內部行為,只要能提供正確的外部行為即可。如果子系統中的模型元素參照另一個子系統中的模型元素,設計者就無法自由移除這個模型元素,也無法將這個模型元素的行為自由重新分配給其他元素。結果系統會變成更加脆弱。
在建立相依性時,請確定在子系統所包含的模型元素和其他子系統所包含的模型元素之間,沒有直接相依性或關聯。另外,也請確定在子系統和介面之間,沒有循環相依性;子系統不能既實現又依賴同一個介面。
在子系統之間的相依性,以及在子系統和套件之間的相依性,都可以直接依照下列方式來繪製。當如此顯示時,相依性會指出一個子系統(如發票管理)直接相依於另一個子系統(付款排程管理)。
使用直接相依性的子系統分層範例
當有可能用一個子系統來替代另一個子系統(它們有相同的介面)時,相依性可以畫到子系統所實現的介面,而不是畫到子系統本身。這會使任何其他模型元素(子系統或類別)能夠實現要用的相同介面。使用介面相依性可讓您利用可替換的設計元素來設計彈性的架構。
使用介面相依性的子系統分層範例
|