《设计模式 基于C#的工程化实现及扩展》 - 书摘精要
(導讀 III)
?
作為面向?qū)ο蠡A設計原則的忠實體現(xiàn),設計模式幫助我們在學習過程中不斷強化以下五項原則性設計:
?
1. 單一職責原則 (SRP) —— 一個類應該有且僅有一個引起變化的因素;
?
2. 開放封閉原則 (OCP) —— 對擴展開放,對修改封閉;
?
3. Liskov 替換原則 (LSP) —— 子類可以替換為它的基類;
?
4. 依賴倒置原則 (DIP) —— 高層模型不應該依賴于低層模塊,二者都應該依賴于抽象。抽象不應該依賴于細節(jié)。細節(jié)應該依賴于抽象;
?
5. 接口隔離原則 (ISP) —— 一個類對另外一個類的依賴建立在最小的接口上;
?
(導讀 VII) 行為型模式關注與運行過程中算法的提供和通信關系的梳理;
?
(P18)
如果代碼將被反復重用,只要進度允許,盡量用泛型:
1. 省去 Cast 過來 Cast 過去,提高了效率;
2. 抽象給代碼帶來更多適應性;
3. 減少接口和參數(shù)的歧義;
?
(P80) 工廠方法地的意圖非常明確,它把類的實例化過程延遲到子類,將 new() 的工作交給工廠完成;
?
(P184)
適配器主要有三個作用:
1. 完成舊接口到新接口的轉(zhuǎn)換;
2. 將“既有系統(tǒng)”進行封裝,邏輯上客戶程序不知道“既有系統(tǒng)”的存在,將變化隔離在 Adapter 部分;
3. 如果客戶程序需要遷移,僅需要在 Adapter 部分做修改;
?
(P187) 如果在一開始學習的時候就有人提示一下多好;
?
(P260) “用面向?qū)ο笏枷朐O計的應用常常會面臨對象實例過多的問題?!?/span>
?
(P276) 外觀模式是屏蔽復雜性的,很多時候代理模式的控制本身也就是對各種復雜性的屏蔽,只不過外觀處理的是一個邏輯上的“子系統(tǒng)”,而且其封裝后的結(jié)果并沒有具體抽象接口的要求,但在代理模式中客戶程序需要的接口明確化了;
?
(P415) 同樣是排序算法,考慮到 CPU 和內(nèi)存容量的不同, 在手機和在PC計算機上可能采用不同的排序算法;
?
(P418)
排序算法選擇:
1. 實現(xiàn)簡單 —— 冒泡排序策略;
2. 比較快速地對小數(shù)據(jù)量進行處理 —— 快速排序策略;
3. 大數(shù)量 —— 外排序;
?
(P445) ORM —— Object —— Relation Mapping ;
?
(P457)
—— DataSet的優(yōu)勢:——
1. 使用 offline 的內(nèi)存數(shù)據(jù)庫;
2. 可以裝載多個 DataTable;
3. 與 XML 的天然集成;
4. 有比較完善的內(nèi)存數(shù)據(jù)篩選、查詢機制;
5. 同時可以維護多個數(shù)據(jù)對象間的關聯(lián)關系;
6. 尤其對于兩層的數(shù)據(jù)應用而言,提供了完善的數(shù)據(jù)使用周期支持;
?
—— DataSet的劣勢 ——
1. 數(shù)據(jù)的業(yè)務語義不甚清晰,客戶程序必須了解字段的組成才能提取字段項;
2. 傳輸中有很多“冗余”的信息在傳遞;
3. 弱類型的數(shù)據(jù)結(jié)構(gòu)在開發(fā)過程中不如強類型的數(shù)據(jù)實體使用方便;
4. 容量有限制;
5. 并非標準的數(shù)據(jù)結(jié)構(gòu),在 WS-* 調(diào)用中考慮到互操作性要求,需要必要的轉(zhuǎn)換;
?
(P462) GOF 給我們最大的啟示就是把緊密引用在一起的對象通過抽象或增加第三個對象的辦法拆解得更加松散;
?
(P482) 模式的使用都是針對某些特定變化而引入的;
?
(P495)
MVC 模式設計是 M 相對 V 穩(wěn)定的基礎上考慮的,但如果 M 本身相對 V 變化更快, MVC 模式的應用效果就會打折扣。它的主要優(yōu)勢在于同一 M 可以支持很多不同的 V ,而且會通過觀察者模式或 C 協(xié)助 V 完成信息的更新,但它也同樣存在劣勢:
1. 對于 V 相對單一或簡單的情況而言,MVC 本身引入了更多的復雜性;
2. 更新的成本相對增加了,原本可以在一個方法中完成的更新要被分拆為 M/V/C 三類對象的協(xié)作;
?
(P499) “管道 - 過濾器”(Pipeline - Filters) 模式是一種通過組織一系列連續(xù)過濾條件完成既定處理的模式;
?
(P563) “高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象。抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象?!?/span>
?
(P570) .NET 3.0 之后對于遠程調(diào)用技術集中到 WCF 框架下;
?
(P574) WCF 其實在用面向?qū)ο蠡姆绞浇鉀Q面向服務的開發(fā)問題;
?
(P628) 在領域驅(qū)動設計中 (DDD : Domain Driven Design) 中,實現(xiàn)業(yè)務邏輯層主要有 Transcation Script、Domain Module 和 Table Module 三種模式;
?
(P644) 不兼容接口間適配器 (Adapter) 是個不錯的途經(jīng);
轉(zhuǎn)載于:https://blog.51cto.com/tianjing/907602
總結(jié)
以上是生活随笔為你收集整理的《设计模式 基于C#的工程化实现及扩展》 - 书摘精要的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIS+PHP环境的3种方法
- 下一篇: C#中readonly, const 和