天天看點

《領域驅動設計:軟體核心複雜性應對之道(修訂版)》—第1章 1.5節深層模型

本節書摘來自異步社群《領域驅動設計:軟體核心複雜性應對之道(修訂版)》一書中的第1章,第1.5節深層模型,作者【美】埃裡克•埃文斯(eric evans), 馬利偉 , 萬龍,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

1.5 深層模型

有用的模型很少停留在表面。随着對領域和應用程式需求的了解逐漸加深,我們往往會丢棄那些最初看起來很重要的表面元素,或者切換它們的角度。這時,一些開始時不可能發現的巧妙抽象就會漸漸浮出水面,而它們恰恰切中問題的要害。

前面的例子大體上是基于一個集裝箱航運項目,這是本書列舉的幾個項目之一,本書還有幾個示例會引用這個項目。本書所舉的示例都很簡單,即使不是航運專家也能了解它們。但在一個需要團隊成員持續學習的真實項目中,要想建立實用且清晰的模型則要求團隊成員既精通領域知識,也要精通模組化技術。

在這個項目中,由于航運從預訂貨運開始,是以我們開發了一個能夠描述貨物和運貨航線等事物的模型。這是必要且有用的,但領域專家卻不買賬。他們有自己的考慮業務的方式,這種方式是我們沒有考慮到的。

最後,在經過幾個月的知識消化後,我們知道貨物的處理主要是由轉包商或公司中的操作人員完成的,這包括實際的裝貨、卸貨和運貨。航運專家的觀點是,各部分之間存在一系列的責任傳遞。法律責任和執行責任的傳遞由一個過程控制——從托運人傳遞到某個本地運輸商,再從這家運輸商傳遞到另一家運輸商,最後到達收貨人。通常,在一些重要的步驟中,貨物停放在倉庫裡。在其他時間裡,貨物則是通過複雜的實體步驟來運輸,而這些與航運公司的業務決策無關。在處理航線的物流之前,必須先确定諸如提單等法律檔案以及支付流程。

20

對航運業務有了更深刻的認識後,我們并沒有删除itinerary(航線)對象,但模型發生了巨大改變。我們對航運業務的認識從“集裝箱在各個地點之間的運輸”轉變為“運貨責任在各個實體之間的傳遞”。處理這些責任傳遞的特性不再是一些附屬于裝貨作業的次要特性,而是由一個獨立的模型來提供支援,這個模型正是在了解了作業與責任之間的重要關系之後開發出來的。

知識消化是一種探索,它永無止境。

21

① 走查,walk through,原來是指一種非正式的代碼評審活動,現在也廣泛用于其他方面,一般是指一步步檢查或分步讨論。——譯者注

② 衛語句,guard clause,指起保護作用的語句。——譯者注

③ strategy一般是指定義一組算法,将每個算法都封裝起來,并且使它們之間可以互換。政策模式的優點是軟體可以由許多可替換的部分組成,各個部分之間是弱連接配接的關系,這樣軟體具有更強的可擴充性、可維護性和可重用性。作者在這裡提到政策模式,是指将每個規則當成一個算法。——譯者注

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀