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