面向对象设计原则-Principles and Patterns读书笔记三
原作者 Robert C. Martin
原文:http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf
引用頁:http://www.objectmentor.com/resources/publishedArticles.html
?4 Interface Segregation Principle(ISP,接口隔離原則)
Many client specific interfaces are better than one general purpose interface.
多個各客戶端相關的接口優于一個通用接口。
ISP是另一種使組件得以廣泛應用的技術。(The ISP is another one of the enabling technologies supporting component substrates such as COM).
這個原則本質很簡單:如果你有一個類為多個客戶提供服務,與其直接使用該類,不如為各客戶的應用分別創建接口,再讓這個類繼承這些接口。好處是類的修改對這些客戶透明,只要維持接口不變即可,即使以后這些接口由不同的類來實現,客戶端也不會感知或需要修改。本質還是功能的內聚性。每個客戶使用的功能有一定的內聚性,按這種內聚性來實現接口,比一個大一統的胖接口,更能準確表達接口要實現的功能,也更便于修改接口。
5 Principle of Package Architecture
在設計中類是必須的,但僅有類對設計是不夠的。更大粒度上的包可以幫助我們讓類更有序。但我們如何決定將哪些類放入哪些包中?下面三則包的內聚性準則可以參考。
1) The Release Reuse Equivalency Principle(REP)
The granule of reuse is the granule of release.
重用粒度即發布粒度。
2) The Common Closure Principle(CCP)
Classes that change together, belong together.
一起變動的類組織在一起
3) The Common Reuse Principle(CRP)
Classes that aren't reused together should not be grouped together.
不在一起重用的類不要組織在一起。
6 The Package Coupling Principles
1) The Acylic Dependencies Principle(ADP)
The dependencies between packages must not form cycle
包之間不得出現循環依賴。
循環依賴對工程的破壞性每個做過上規模項目的人都會深有體會。那么如何解除循環依賴,如原來A中部分功能要依賴于B,而要在B中加入的新功能又依賴于A,怎么辦?有幾個簡單的辦法:
a.將要加入的新功能放到一個新的包中去,使其依賴于A與B,這要就是一個依賴鏈,避免了循環依賴。
b.將A,B中為對方所依賴的功能抽象成接口,然后A,B都針對接口編程,這樣A,B都只依賴于抽象接口,而沒有了彼此的依賴。
2) The Stable Dependencies Principle
Depend in the direction of stability.
沿著穩定性的方向依賴。
即易變的模塊依賴于穩定的模塊,而非相反。何者易變?何者罕變?無依賴者罕變,依賴多者易變,蓋其依賴者一變,其多相應變矣。
3) The Stable Abstraction Principle
Stable package should be abstract packages.
依賴鏈中低端難變,而上端易變。但按OCP原則,低端雖難變但不應難于擴展。故其應高度抽象以備擴展之需。
具象易變,抽象罕變。抽象居下以定架構,具象居上以擴功能。故具象依賴于抽象,而非抽象依賴于具象。
轉載于:https://www.cnblogs.com/MichaelPeng/archive/2009/11/14/1603142.html
總結
以上是生活随笔為你收集整理的面向对象设计原则-Principles and Patterns读书笔记三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform跨线程调用简洁办法
- 下一篇: SEO技巧:好的域名是网站成功的开始