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

留言

這個網誌中的熱門文章

WINDOWS cmd 操作:查看進程、TCP連線、刪除TCP連線和進程

mongodb aggregate 筆記

mongodb shell 操作