Packages that are maximally stable should be maximally abstract. Instable packages should be concrete. The abstraction of a package should be in proportion to its stability.
最穩定的包應該是最抽象的包。不穩定的包應該是具體的包。包的抽象程度跟它的穩定性成正比。
換成另一個說法是:
Stable packages should be abstract packages.
穩定的包應該是抽象的包。
我們在The Stable Dependencies Principle (SDP) - OO設計的穩定依賴原則 一文中談到了包的穩定性:不容易改變的包應該具有更好的穩定性。
一個包的抽象程度越高,它的穩定性就越高。反之,它的穩定性就越低。一個穩定的包必須是抽象的,反之,不穩定的包必須是具體的。
穩定的包的構成
抽象類或接口通過子類繼承擴展行爲,這表示抽象類或接口比它們的子類更具有穩定性。總之,爲了構成穩定的包,應該提高包內的抽象類或接口的比率;它們的子類可以放在另一個不穩定的包內,該包依賴上述穩定的包,從而遵循了穩定依賴原則(SDP)。
理想的體系結構應該是:
不穩定的(容易改變的)包處於上層
- 它們是具體的包實現
穩定的(不容易改變的)包處於下層
- 不容易改變,但容易擴展
- 接口比實現(具體的運行代碼)在內在特性上更具有穩定性
圖1:遵循穩定依賴原則(SDP)的理想的體系結構
穩定抽象等價原則(SAP)爲我們解決包之間的關係耦合問題。在設計包結構時,穩定的包應該是抽象的(由抽象類或接口構成),不穩定的包應該是具體的(由具體的實現類構成)。