誰來建立另乙個類的示例?
對於類a和類b,滿足下列條件
1.b包含a
2.b記錄a
3.b和a關係很密切
4.b擁有a例項化所必需的示例
則應該由b來建立a的例項,其中1、2優先
為乙個物件分配職責的一般原則是什麼?
誰具有完成一件事情所必須的資訊,就把職責分配給它
步驟:
1.把職責描述清楚
2.設計模型中有沒有相關的類能做這件事
3.如果沒有,就在領域模型中找
如何保證設計方案支援低的依賴性、低的變化影響度、增加可重用性?
耦合:兩個子模組之間聯絡的強度
低耦合與其他原則如資訊專家、高內聚必須綜合考慮
不能單獨考慮低耦合
繼承關係中,子類和父類的耦合非常緊密(能用組合就不用繼承)
ui應該把捕捉到的系統操作,發給領域層的哪個物件?
façade controller外觀控制器:
適用於相對較小的系統
有限數量的系統操作
在訊息處理系統中,不能**訊息到可選的控制器時
use case/session controller用例控制器/會話控制器:
應用場合
當採用外觀控制器會導致高耦合、低內聚時
很多系統時間跨越多個不同的處理過程
概念上容易理解和構建
如何使物件功能專注、可理解、可管理,同時又支援低耦合?
分配職責時保持高內聚
內聚:模組內元素之間緊密聯絡的程度,比如乙個類內部的操作之間
高內聚的類:
有較少數量的操作,操作的性質基本一致,不會做太多的事情
如果同類別的工作太多,則會定義新的類分擔任務,相互間合作
如何處理依據型別不同而有不同行為的一類需求?
使用動態作為依據型別變化的行為,進行職責分配
不要去測試物件的型別或者條件邏輯,並以此選擇相應的行為
即不要使用條件邏輯,而是為不同的類定義相同名字的方法
不同的類實現了相同的介面、或者有乙個共同的父類(繼承)
如果依據資訊專家原則獲得的解決方案不適合,既不想違反低耦合、高內聚,也不想違反其他的原則,該如何把職責分配給物件?
把高度內聚的職責分配給虛構出來的乙個類,這個類在領域模型裡沒有對應的概念,這種方式在有的場合能起到支援低耦合、高內聚、重用的效果
應用純虛構原則:
可重用多數情況下按功能類定義新的類,是一種「功能為中心的」物件
如果功能的相關性比較高的話,滿足高內聚
把職責分配到**可以避免兩個或者多個物件之間的直接耦合?如何解耦物件以保持較高的可重用性?
把職責分配給乙個中介物件,隔離物件與其他構建或者服務,使它們不產生直接耦合
如何設計物件、系統和子系統,使得這些成分裡面的變化因素、不穩定因素不會對系統的其餘部分造成意想不到的影響?
標識出能夠預計的變化點或者不穩定點,職責分配的時候建立乙個穩定的介面,把它們與系統的其餘部分隔離開來
「隔離可能的變化」是乙個設計原則,它鼓勵使用乙個穩定的介面來封裝可以預知的變更點
資料封裝、多台、資料-驅動設計、服務查詢、配置檔案、介面都用到了pv
兩種可能的變化點
變化點:在當前系統或者當前需求中已經存在了
演化點:推測的型別變化可能發生在今後,但在當前的需求中不存在
軟體系統在其生命週期都在發生變化,無論是好的設計還是壞的設計,都面臨著這個問題,但好的設計是穩定的
軟體系統應當允許功能擴充套件(開放性),可以擴充套件行為已滿足新的需求
不允許修改原有的**(關閉性)
應當嘗試設計永遠不需要修改的模組
系統行為的擴充套件只需要增加新的**,不能修改已有的**
模組不允許修改已有的**,而這種修改會影響客戶端
繼承的***:
打破了封裝性
繼承的**是靜態/編譯時繫結的
客戶需要購買整個軟體包
父類定義了許多硬性的規定
組合的特點:
沒有打破封裝性
物件組合是一種多型/執行時繫結
整體與部分之間只有介面邊界關聯,耦合較低
各部分職責明確
高層模組不應當依賴低層模組,兩者都依賴抽象
抽象不能依賴細節,細節應當依賴抽象
1.面向介面設計,而不是面向實現設計
面向介面設計的原因:
抽象類/介面修改的概率偏低
抽象概念容納的範圍廣,易於擴充套件/修改
不應當修改抽象的類/介面,符合ocp原則
例外:有些類非常成熟、穩定
2.避免傳遞性依賴
使用繼承機制,消除傳遞性依賴
3.每當有疑慮時,增加乙個間接層
如果設計的類找不到乙個滿意的解決方案,嘗試把職責委派其他乙個或者多個類
如果b呼叫c違法了某些原則,考慮讓a承擔一下職責,讓a來呼叫c
特點:
描述了乙個反覆出現的問題
描述了核心的解決方案
其他人可以無數次使用這個方案解決類似的問題
設計模式 物件導向設計原則
軟體的可維護性和可複製性是兩個非常重要的軟體質量屬性 物件導向物件設計原則是設計模式學習的基礎。每乙個設計模式都符合乙個或者多個物件導向設計原則 單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小 單一設計原則 乙個物件應該只包含單一的職責,並且該職責被完整的封裝在乙個類裡 這也意味著 ...
設計模式 物件導向設計原則
物件導向設計原則為支援可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。最常見的7種物件導向設計原則如下表所示 使用頻率 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責 開閉原則 o...
設計模式 物件導向設計原則
世界是具體的,認知是抽象的。像自然界中的生物 植物 動物乙個個名詞,就是對一系列具體個體抽象出來的稱謂,而魚 老虎 樹等就是乙個個實在的具體。哦,也許你會說,樹也是對一系列具體個體的抽象出來的稱謂,對也不對,對是因為樹確實是一系列具體個體的抽象稱謂,不對是因為照這個邏輯下去,就會陷入死迴圈,直到小到...