為什么要寫這節文章呢?
首先主動看我這系列文章和參加活動課程的同學, 肯定是積極好學的. 所以很大概率是學過設計模式和DDD理論的. 很大概率不是走一點都不懂設計模式和DDD理論這個極端, 而是走了過度使用設計模式和DDD理論,鑽了牛角尖這個極端,這個現象有個科學名詞叫做“原教旨主義”
因為我會在后面團隊做項目的章節里面講到DDD理論. 所以我在這節就不過多贅述了. 就以設計模式為例吧.
- 設計模式起於1995年的《Design Patterns: Elements of Reusable Object-Oriented Software》一書, 1995年, 年代好久遠啊, 23年來各種技術工具發展, 這本書提出的23種設計模式的實現已經跟不上時代的腳本了. 我是2006年看這本書的, 那時候看得真是糊里糊塗啊.
- 直到后來遇到這本書<.NET與設計模式> 才開始能夠理解設計模式, 因為這本書根據C#的特性(特別是反射), 合並23種設計模式的部分, 甚至做出了創新. 也就是說, 這本書能根據工具和技術的發展去完善設計模式理論的實現, 當然, 具體細節肯定是和上面1995年GOF的那本有不少差別.
- 看完<.NET與設計模式>這本書又過了一年, 我接觸到Martin Flower的<測試驅動開發>那本書, 並開始使用TDD. 因為TDD需要使用Mock, 所以就需要使用interface和ioc, 這時候就不得不同時也不知不覺就用上了設計模式了.
- 又過了3年, 2010年, 我開始應用BDD, BDD比TDD多了很多優點, 其中一個就是測試代碼更加結構化了, 於是用設計模式更自然了.
- 我在2011年的時候回顧了以上兩本設計模式的書籍, 發現除了singleton模式的實現之外所有設計模式實現都變了. 詳情可以看這篇文章<朝花夕拾 - 應用了6年久經實際項目考驗未變的代碼 - singleton模式>
- 現在是2018年了, 又十幾年過去了, C#也到了8.0了, 這么多年來C#多了十分多的特性, 自然設計模式的實現細節是不一樣的, 設計模式的種類更加不可能還是1995年的那23種了.
技術和工具不斷的升級會簡化和合並理論細節,從而更新了理論實施細節。所以我們不要鑽牛角尖。
DDD也一樣,ABP雖然不是嚴格的DDD實現,但是我們應該是去適應ABP,而不是去適應DDD. 就像我們應該去根據C#語言去實現設計模式, 而不是去根據GOF 1995年的書籍去實現設計模式