從OO到DDD

????????分而治之作為控制復(fù)雜性的技巧由來(lái)以久。在設(shè)計(jì)復(fù)雜系統(tǒng)時(shí),先分解為一些小的部分,然后獨(dú)立的處理每個(gè)部分,再將他們連接起來(lái)以完成實(shí)際工作。要理解某一部分,只需要了解這部分相關(guān)的內(nèi)容即可,而非所有內(nèi)容。這些設(shè)計(jì)方法可以分為三類:自頂向下的結(jié)構(gòu)化設(shè)計(jì),數(shù)據(jù)驅(qū)動(dòng)設(shè)計(jì)與面向?qū)ο笤O(shè)計(jì)。結(jié)構(gòu)化設(shè)計(jì)是面向數(shù)據(jù)流的設(shè)計(jì)方法,結(jié)構(gòu)化設(shè)計(jì)希望程序的結(jié)構(gòu)盡可能反映要解決的問題的結(jié)構(gòu),將計(jì)算邏輯封裝在結(jié)構(gòu)以外的單元中。如果我們以這樣的方式設(shè)計(jì)一個(gè)訂單系統(tǒng),很有可能是這樣的:


摘自《重構(gòu)》

????????這種設(shè)計(jì)方法在計(jì)算受限的20世紀(jì)七八十年代,問題域還沒有那么復(fù)雜,是很有效的,但當(dāng)代碼量超過(guò)10萬(wàn)行時(shí),結(jié)構(gòu)化方法就會(huì)帶來(lái)問題,對(duì)于復(fù)雜度的控制就有一些力不從心了,很容易設(shè)計(jì)出大泥球架構(gòu)。在這樣的背景下,OO開始逐漸流行起來(lái),它基于問題領(lǐng)域的關(guān)鍵抽象概念對(duì)系統(tǒng)進(jìn)行分解,并封裝軟件系統(tǒng)內(nèi)在復(fù)雜性?;贠O方法設(shè)計(jì)的訂單系統(tǒng)如下:


摘自《重構(gòu)》

? ? ? ? 不管是過(guò)程式還是OO分解,都針對(duì)要解決的問題做了抽象,區(qū)別是抽象的角度不同,過(guò)程式是以數(shù)據(jù)為中心,而OO是將問題分解成領(lǐng)域內(nèi)的關(guān)鍵概念,通過(guò)概念之間的協(xié)作完成工作,算法封裝在概念之下。OO的分解問題的方式更加接近人類思維,也簡(jiǎn)化了系統(tǒng)設(shè)計(jì)。就這樣OO成為設(shè)計(jì)系統(tǒng)的優(yōu)選實(shí)踐,開發(fā)者似乎找到了銀彈,在實(shí)踐中開始大范圍的使用,但遺憾的是開發(fā)者并沒有將關(guān)注點(diǎn)從數(shù)據(jù)轉(zhuǎn)移到領(lǐng)域上,大部分開發(fā)者還是打著OO的大旗愉快的寫著過(guò)程式的代碼,駕馭復(fù)雜問題的痛點(diǎn)也沒有根治。

????????隨著OO設(shè)計(jì)模式與設(shè)計(jì)原則的提出,在實(shí)踐OO方面給了更強(qiáng)的指導(dǎo)。有了模式,我們就能記錄那種己知反復(fù)出現(xiàn)的問題以及特定上下文對(duì)它的解決方案。就這樣我們掌握了更豐富的套路和技巧,站在了無(wú)數(shù)巨人的肩膀上構(gòu)建系統(tǒng),華麗的設(shè)計(jì)在項(xiàng)目中隨處可見,但是對(duì)復(fù)雜問題的駕馭依然像大山一樣矗立在那無(wú)法逾越。開發(fā)人員也并沒有停止吐槽系統(tǒng)太爛,PM依然抱怨開發(fā)工作進(jìn)展太慢,測(cè)試的范圍還是難以控制,團(tuán)隊(duì)在承擔(dān)的壓力似乎沒有減少。

????????進(jìn)入互聯(lián)網(wǎng)時(shí)代以后,傳統(tǒng)企業(yè)開始向互聯(lián)網(wǎng)化過(guò)渡,微服務(wù)隨之興起,合理的規(guī)劃微服務(wù)與設(shè)計(jì)服務(wù)間的通信策略成為成功實(shí)踐微服務(wù)的關(guān)鍵能力。DDD這瓶沉年老酒被更多的開發(fā)者重新拾起,它以從問題域入手,先分解領(lǐng)域內(nèi)的關(guān)鍵概念,再為關(guān)鍵概念建立聯(lián)系,設(shè)計(jì)實(shí)踐方案。從戰(zhàn)策到戰(zhàn)術(shù)提供了一整套可操作的方法成為了微服務(wù)建模與設(shè)計(jì)的最佳實(shí)踐。

????????在DDD的指導(dǎo)下,系統(tǒng)設(shè)計(jì)過(guò)程重回OO本質(zhì),問題域成為建模與設(shè)計(jì)的焦點(diǎn)。以業(yè)務(wù)能力為中心組織的微服務(wù)也開始逐漸發(fā)揮它的優(yōu)勢(shì),問題領(lǐng)域的復(fù)雜性開始變的可控,構(gòu)建的系統(tǒng)也充分發(fā)揮出了OO優(yōu)勢(shì),演進(jìn)式架構(gòu)也隨之落地。

????????DDD是OO DONE RIGHT在實(shí)踐中也被無(wú)數(shù)次證明,AKKA Persistence FSM在最初設(shè)計(jì)時(shí)并沒有基于DDD這套方法去設(shè)計(jì),但是當(dāng)它以O(shè)O的原則下實(shí)現(xiàn)后,與DDD的思想驚人的相似。如果你正在基于OO設(shè)計(jì)與實(shí)現(xiàn)系統(tǒng),去實(shí)踐DDD開啟真正的OO之旅吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容