有人質疑2003年出版的《領域驅動設計》一書中的理念當今是否依然適用。在該書的作者Eric Evans看來,相比于14年前該書出版時,當前領域驅動設計(DDD,Domain-Driven Design)的理念更為適用。這是來自于Evans在Explore DDD大會上所作的開幕式主題演講。Explore DDD大會是首個聚焦于DDD的開創性大會,在北美的丹佛市舉行。Evans的報告依據軟件開發的歷史沿革,探討了一些DDD的主要理念。比起我們過去所采用的方式,軟件開放工具和技術范圍在不斷擴展,其中不少已經采用了DDD方式。Evan指出:“DDD不涉及具體的開發技術,但也并非對技術漠不關心”。
回顧2003年,那時我們所能使用的最先進技術,無非是Java、J2EE、SQL數據庫和對象關系映射(ORM,Object-Relational Mapper),此外沒有更多的選擇。這樣的選擇面不廣,導致了我們使用這些工具僅是因為這些工具是唯一可用的。Evans舉例說,ORM并不適用于解決我們的所有事情,但依然被我們持續使用了十到十五年。Evans稱,他并非說對于某些情況任何工具和模式架構都不適用。而是對不分場合都僅有一套解決方案可用感到困惑。他相信,DDD在過去的十四年間得到了發展,因此“如果在推行DDD時繼續照本宣科《領域驅動設計》一書,這就不太光彩了”。
在Evans撰寫《領域驅動設計》一書時,其中很多概念是難以用當時的工具所實現的。但時至今日,使用現代的平臺實現已變為易事。Evans特別強調了書中給出的“使值對象不可變”這一理念。這一理念曾非常難以做到,以至于被開發人員認為是不值得遵守的。但是情況已經發生了變化,函數編程語言讓不可變更易于實現。與此同時,微服務的推進有助于標記上下文邊界(Context Boundary),而NoSQL數據庫提供了比關系數據庫更好的聚合管理。這些進展使開發人員可以完全聚焦于解決復雜性問題,該問題是軟件的核心問題。Evans稱贊這些進展為開發人員編寫出完全表達模型的軟件提供了方便。“如果技術能在此類事情上為我們提供支持,那么我們就可以聚焦于去給出更好的模型”。
軟件開發中,妥協和權衡是不可避免的。Evans鼓勵所有人接受“并非所有的大型系統都會得到很好的設計”。根據“好籬笆造就好鄰里”這一理念,受限上下文會使系統中好的部分免受不好部分的影響。我們可以做出合理的推理,即并非所有的開發都能處于良好定義的受限上下文中,同時并非每個項目都會遵循DDD。開發人員常常會感慨,在工作中面對的是一些遺留系統。Evans卻對遺留系統給予了高度的評價,因為企業利潤通常主要來自于這些遺留系統。他鼓勵開發人員,“終究會有一天,你所開發的系統也會成為遺留系統”,希望到那時它會得到交口稱贊。
開源軟件也受到了Evans的推崇,尤其是作為一種學習方式時。Evans在演講中分享了他通過例子學習Smalltalk的經歷。從案例中學習這一精神完全匹配Explore DDD大會的協同環境,大會中有三分之一的演講是對真實世界案例研究,與會者分享了演講者在實現DDD中的經驗。
Evans很高興看到風向已轉變為趨向優雅設計?!额I域驅動設計》一書的撰寫,正是為了解決如何面對系統無法擴展導致業務也不能擴展的這類問題。DDD作為一種知我實現的需求,Evans指出:“對更整潔設計的需求,終將創建更整潔的設計”。
查看英文原文: Eric Evans: Domain-Driven Design Even More Relevant Now