本書通過(guò)生動(dòng)的案例和實(shí)用的指南,向讀者展示了如何在實(shí)踐中進(jìn)行DDD落地以創(chuàng)造出靈活的、可維護(hù)的且具有良好可擴(kuò)展性的軟件系統(tǒng)。無(wú)論您是剛?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é)問(wèn),也是解決復(fù)雜業(yè)務(wù)問(wèn)題的利器。本書作者通過(guò)簡(jiǎn)約但不簡(jiǎn)單的案例向讀者展示了如何將這一抽象性十足的方法理論應(yīng)用于實(shí)踐當(dāng)中,給大家以豁然開朗之感。
中電福富信息科技有限公司副總經(jīng)理 林啟銨
本書作者以深厚的專業(yè)知識(shí)和豐富的實(shí)踐經(jīng)驗(yàn)為根本,將復(fù)雜的技術(shù)概念轉(zhuǎn)化為易于理解的思想和語(yǔ)言,巧妙地將抽象的概念運(yùn)用于具體的案例之中,能夠讓讀者快速領(lǐng)悟DDD的精華。書中的設(shè)計(jì)技巧和建議,不僅能夠幫助您快速掌握理論知識(shí),還能帶領(lǐng)您解決實(shí)踐中的技術(shù)挑戰(zhàn),加速技能的提升和自身的成長(zhǎng)。
廣東億迅科技有限公司總工程師 廖小文
為什么要寫此書
我小的時(shí)候比較喜歡拆家, 和幼年的哈士奇有些類似。 不過(guò)經(jīng)濟(jì)條件所限, 能拆的東西也僅限于鐘表、 收音機(jī)這類小的物件兒。 兒時(shí)的夢(mèng)想是成為一名科學(xué)家或老師, 不過(guò)隨著成長(zhǎng), 夢(mèng)想也逐漸變得更現(xiàn)實(shí)起來(lái), 最終選擇了與軟件設(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, 簡(jiǎn)稱: DDD) , 但學(xué)習(xí)過(guò)程并不順利。 好的方面是伴隨著失敗, 自己也積累了很多更為務(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ī)軟件所帶來(lái)的滿足感已經(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ā)展至今仍活力十足。 越來(lái)越多的人開始意識(shí)到它的強(qiáng)大和先進(jìn), 其思想被應(yīng)用到各類大型軟件項(xiàng)目中。 但現(xiàn)實(shí)的情況卻很殘酷: 我們都知道它很強(qiáng)大, 但我們不想用。 客觀來(lái)講, DDD 誕生之時(shí)的確是超時(shí)代的。 有些理論過(guò)于理想化并不能在真實(shí)的項(xiàng)目中被輕易實(shí)踐, 比如限界上下文。 沒(méi)有現(xiàn)代微服務(wù)技術(shù)的加持, 我們很難將其落地。
軟件系統(tǒng)越發(fā)復(fù)雜, 使得企業(yè)不得不背負(fù)更高的建設(shè)與運(yùn)營(yíng)成本,DDD 作為應(yīng)對(duì)軟件復(fù)雜之道是解決這一問(wèn)題的有力武器。 與此同時(shí), 時(shí)代的發(fā)展以及技術(shù)的推陳出新也讓 DDD 真正地有了屬于自己的舞臺(tái), 這是我們選擇它的原因。
如何使用本書
本書主要適用于軟件設(shè)計(jì)人員和研發(fā)人員, 您需要至少了解一門面向?qū)ο箝_發(fā)語(yǔ)言, 如 C# 、Java。 當(dāng)然, 這些僅僅是基礎(chǔ), 軟件設(shè)計(jì)并不只是某一門特定的學(xué)問(wèn)而是各類知識(shí)的集成。 所以想要無(wú)障礙閱讀本書, 您還需要了解一些簡(jiǎn)單的設(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í)如何有效安排各類資源, 即錢、 事、 物。
與其說(shuō)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是一種技術(shù), 不如將其看成設(shè)計(jì)思想更為合適。 筆者資歷尚淺, 本書其實(shí)是一種嘗試, 即: 通過(guò)個(gè)人的理解并伴以務(wù)實(shí)的態(tài)度對(duì)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)這一門學(xué)問(wèn)進(jìn)行個(gè)性化解讀。 有理解或表達(dá)不當(dāng)之處, 請(qǐng)讀者在求同存異的同時(shí), 有取舍地借鑒書中內(nèi)容。
編 者