為什么要寫此書
我小的時候比較喜歡拆家, 和幼年的哈士奇有些類似。 不過經濟條件所限, 能拆的東西也僅限于鐘表、 收音機這類小的物件兒。 兒時的夢想是成為一名科學家或老師, 不過隨著成長, 夢想也逐漸變得更現實起來, 最終選擇了與軟件設計為伍。
很多人羨慕程序員的高薪與體面, 殊不知我們自嘲為碼農。 軟件設計是一種創(chuàng)造性的活動, 它與藝術創(chuàng)作類似。 自然, 大部分人的職業(yè)生涯早期的確都會做一些搬磚類的工作, 但我們不應該讓其變成一種常態(tài)。
我于2007 年接觸領域驅動設計(DomainDrivenDesign, 簡稱: DDD) , 但學習過程并不順利。 好的方面是伴隨著失敗, 自己也積累了很多更為務實的知識。 2021 年, 我懷著滿滿的自信嘗試在網上發(fā)布一些領域驅動設計相關的文章, 期望能將自己所學的知識進行總結與分享。 這期間有幸認識了北京航空航天大學出版社的編輯, 他們鼓勵我將自身所學體系化, 本為玩票性質的事情自此開始偏向了另外一個方向, 成為編寫本書的一大誘因。
為什么選擇領域驅動設計
進入21 世紀, 人們的生活伴隨著互聯網的發(fā)展有了翻天覆地的變化。 加之智能手機和各類智能設備的催化, 單機軟件所帶來的滿足感已經不能滿足人們日常生活與工作的需要。 事物總是有兩面性的, 軟件的各種功能在滿足我們方便使用的同時, 便是其規(guī)模和復雜度的急劇擴張, 僅僅是技術知識的爆炸對于精力有限的我們就是一項很大的挑戰(zhàn)。
領域驅動設計誕生于21 世紀初, 歷經20 余年的發(fā)展至今仍活力十足。 越來越多的人開始意識到它的強大和先進, 其思想被應用到各類大型軟件項目中。 但現實的情況卻很殘酷: 我們都知道它很強大, 但我們不想用。 客觀來講, DDD 誕生之時的確是超時代的。 有些理論過于理想化并不能在真實的項目中被輕易實踐, 比如限界上下文。 沒有現代微服務技術的加持, 我們很難將其落地。
軟件系統(tǒng)越發(fā)復雜, 使得企業(yè)不得不背負更高的建設與運營成本,DDD 作為應對軟件復雜之道是解決這一問題的有力武器。 與此同時, 時代的發(fā)展以及技術的推陳出新也讓 DDD 真正地有了屬于自己的舞臺, 這是我們選擇它的原因。
如何使用本書
本書主要適用于軟件設計人員和研發(fā)人員, 您需要至少了解一門面向對象開發(fā)語言, 如 C# 、Java。 當然, 這些僅僅是基礎, 軟件設計并不只是某一門特定的學問而是各類知識的集成。 所以想要無障礙閱讀本書, 您還需要了解一些簡單的設計模式以及UML 相關的內容。
本書分為戰(zhàn)略與戰(zhàn)術兩部分, 后者所涉及的知識雖與前者有關系, 但亦可獨立存在。 如果您初入軟件設計行業(yè)或從事本行業(yè)時間尚短, 建議先從第二部分讀起。 戰(zhàn)略相關的知識理論色彩較濃厚, 是勸退讀者的最佳武器; 戰(zhàn)術部分則側重于各種技術的講解, 這才是程序員最喜歡的內容。 當您確信自己能夠被 DDD 吸引的時候, 可再回到第一部分, 避免讓自己的學習旅程出現夭折。
除技術人員之外, 項目經理、 架構師或需求分析師也可成為本書的讀者, 尤其是戰(zhàn)
略部分。 如果您的角色處于上述工種, 可以考慮從第一部分讀起, 以學習如何站在更高的戰(zhàn)略角度去了解系統(tǒng)的全貌; 學習如何將一個大的系統(tǒng)進行劃小建設; 學習如何有效安排各類資源, 即錢、 事、 物。
與其說領域驅動設計是一種技術, 不如將其看成設計思想更為合適。 筆者資歷尚淺, 本書其實是一種嘗試, 即: 通過個人的理解并伴以務實的態(tài)度對領域驅動設計這一門學問進行個性化解讀。 有理解或表達不當之處, 請讀者在求同存異的同時, 有取舍地借鑒書中內容。
編 者