GRASP Design Principles
https://home.cs.colorado.edu/~kena/classes/5448/f12/presentation-materials/rao.pdf
https://krzysztof-kwiecinski.medium.com/grasp-design-principles-de98cae2196c
Creator
問題:有一個物件需要被創造,誰有職責創造物件。
解法:被包含的物件要被包含他的物件創造。
Expert
問題:有一個物件,需要決定這個物件能什麼職責。
解法:擁有資料的人有解決問題的職責。
Low Coupling
問題:兩個物件的聯繫強度應該要多強。
Coupling:
- 一個物件聚合或組合於其他物件。
- 一個物件實作或繼承於其他物件。
聚合:
子物件可以獨立於父物件運作,如圖書館、書架、書。
組合:
子物件不可獨立於父物件,如人、手、腳。
Controller
處理 ui 層到 domain 層的請求。
其他情況:
- 物件代表整個系統。
- 物件代表use case。
肥大的controller代表:
- 問題:controller有太多職責,解法:開更多的controller。
- 問題:controller做太多的任務,解法:委託給其他的class。
High Cohesion
問題:元素和功能如何關聯
解法:相關職責包在同一個單元裡。
Polymorphism
多型提供解決方式處理相同類型但會變化的物件。
Pure Fabrication
把相關的但有牽扯到其他操作的分開到其他的 class,例如資料庫操作。
Indirection
問題:如何避免兩個元素直接耦合。
解法:加一個元素在兩個元素中間,避免直接耦合。
ex: Adapter, Facade, Obserever
留言
張貼留言