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