這張圖是2008年的銀行信用卡的ER圖果漾,目前可以看到這圖,圖中的Entity的條目非常滿當(dāng)谷誓,非常擁擠绒障,每一個(gè)Entity以及ValueObject由大量的屬性構(gòu)成。
到了2012年捍歪,當(dāng)時(shí)的股票交易系統(tǒng)SOA(service oriented architecture)的架構(gòu)户辱,此時(shí)系統(tǒng)構(gòu)圖看著還是比較簡(jiǎn)潔的一種,但是到了后面就如下圖所示了
2016年的股票交易系統(tǒng)糙臼,就變得異常的復(fù)雜了焕妙,想維護(hù)起來(lái)都是異常困難。
到了2018年弓摘,此時(shí)的保險(xiǎn)項(xiàng)目的微服務(wù)架構(gòu)形成了目前的形式焚鹊。從上至下分別為
API service
, composition service
韧献, 以及core service
末患,從上至下,相當(dāng)于從infrastructor
慢慢形成組成API service
锤窑,然后再有不同的API璧针,組成相應(yīng)的核心服務(wù)。這樣的架構(gòu)屬于數(shù)據(jù)驅(qū)動(dòng)架構(gòu)渊啰,這樣做的目的主要是作為解耦探橱。對(duì)于圖中間的ESB,在之前的設(shè)計(jì)中可以理解為路由绘证,比如一個(gè)請(qǐng)求入到ESB中隧膏,ESB會(huì)根據(jù)相應(yīng)的數(shù)據(jù),將請(qǐng)求導(dǎo)向相應(yīng)的位置中去嚷那,圖中左側(cè)的web可以理解為每一個(gè)模塊胞枕,這樣一套ESB系統(tǒng)的投入差不多在千萬(wàn)級(jí)別左右,這樣的系統(tǒng)適合用于分布式系統(tǒng)中魏宽,一般設(shè)置這種系統(tǒng)的規(guī)模腐泻,人數(shù)應(yīng)該在400-500人左右才會(huì)設(shè)置這樣的系統(tǒng)决乎。
于此同時(shí),在結(jié)合上面幾個(gè)圖派桩,開(kāi)始時(shí)候很簡(jiǎn)潔明了构诚,到后面的及其復(fù)雜,因此我們考慮架構(gòu)的時(shí)候應(yīng)該把時(shí)間因素結(jié)合進(jìn)去铆惑。
我們?cè)诩軜?gòu)的時(shí)候會(huì)遇到的問(wèn)題
如何解決這個(gè)問(wèn)題范嘱?
圖中左側(cè)的STORIES,可以理解為統(tǒng)一語(yǔ)言鸭津,在統(tǒng)一語(yǔ)言的基礎(chǔ)的進(jìn)行拆分彤侍,但是問(wèn)題也隨之出現(xiàn)肠缨,隨著左側(cè)的拆分逆趋,拆分粒度越細(xì)小,系統(tǒng)設(shè)計(jì)得越爛晒奕。
理想的架構(gòu)思想應(yīng)該是和進(jìn)化論一樣闻书,隨時(shí)時(shí)間的推移而進(jìn)行演變,也就引導(dǎo)了下一步:適應(yīng)度方程(Fitness Function)脑慧。
在圖中魄眉,右側(cè)的色彩塊,每一個(gè)像素都代表著一種顏色闷袒,要讓右邊無(wú)規(guī)則的色彩慢慢演化成蒙娜麗莎這幅畫(huà)坑律,每一個(gè)色彩像素都會(huì)自動(dòng)進(jìn)行調(diào)整,往著蒙娜麗莎進(jìn)行演化囊骤,這就是大致的適應(yīng)度方程的介紹晃择。更多關(guān)于適應(yīng)度方程的介紹,可以上youtube也物。
架構(gòu)與組織共同進(jìn)化宫屠,這里的核心詞是支撐域,核心域滑蚯。一個(gè)團(tuán)隊(duì)的支撐域可能就是另一個(gè)團(tuán)隊(duì)的核心域浪蹂,每一個(gè)團(tuán)隊(duì)最核心的任務(wù)就是找到屬于自身的核心域。
怎樣適應(yīng)進(jìn)化論告材?使得架構(gòu)更具生命力坤次?Evan Bottcher提出一下概念,也就是這個(gè)圓形圖案斥赋,要堅(jiān)持四個(gè)原則
fast feedback
repeatability
simplicity
clean code
于此同時(shí)必須考慮到時(shí)間維度浙踢,將時(shí)間的考量納入系統(tǒng)架構(gòu)設(shè)計(jì)中。
并不是在業(yè)務(wù)領(lǐng)域的絕對(duì)正確以及規(guī)范就是代表著架構(gòu)的正確灿渴。
同時(shí)在分解業(yè)務(wù)的時(shí)候洛波,必須找到團(tuán)隊(duì)自身的核心域胰舆。
如何找到屬于自己團(tuán)隊(duì)的核心域,這個(gè)得根據(jù)clients來(lái)具體分析蹬挤,但是一定要關(guān)注時(shí)間維度缚窿。
在現(xiàn)在的DDD中,一般情況是業(yè)務(wù)和系統(tǒng)捆綁在一起(??有點(diǎn)不理解這句話)焰扳。
一般業(yè)務(wù)怎么落地倦零? 通常而言,對(duì)于目前情況吨悍,有兩點(diǎn)
-
common language
boundary context
DDD構(gòu)建快扫茅,建模快育瓜,但是不能盲目用在無(wú)限大的領(lǐng)域上葫隙。
根據(jù)梳理過(guò)后的需求,抽離出領(lǐng)域模型
一下均為實(shí)驗(yàn)項(xiàng)目