引言
有一個(gè)認(rèn)可度比較高的對(duì)于軟件系統(tǒng)架構(gòu)的定義:職責(zé)明確的模塊或者組件侠坎、關(guān)聯(lián)關(guān)系蚁趁、約束和指導(dǎo)原則。如下圖所示:
當(dāng)我們通過需求分析得到了業(yè)務(wù)的實(shí)例化規(guī)則以及領(lǐng)域模型之后实胸,接下來就是進(jìn)行系統(tǒng)的架構(gòu)他嫡,按照上面對(duì)架構(gòu)的定義,其中比較重要的步驟就是對(duì)系統(tǒng)進(jìn)行拆分與集成庐完。
拆分的好處
將系統(tǒng)拆細(xì)之后主要可以簡(jiǎn)化認(rèn)知與增加復(fù)用涮瞻。
簡(jiǎn)化認(rèn)知:將系統(tǒng)拆細(xì)后一次只需要理解少量的概念,在一個(gè)特定的范圍內(nèi)工作假褪。在工作中與其他域的同事進(jìn)行合作的時(shí)候很難的地方就是概念的理解署咽,面對(duì)一個(gè)新的名稱或者同一個(gè)名稱的不同用法(解釋)時(shí)往往難以短時(shí)間理解,因此在系統(tǒng)設(shè)計(jì)中沒有必要不要輕易的新增概念生音。
增加復(fù)用:當(dāng)把系統(tǒng)拆細(xì)之后宁否,每個(gè)子系統(tǒng)都有自己特定的問題域,可以屏蔽一些特定的依賴(隔離了變化)缀遍,因此可以增加復(fù)用度慕匠。
拆分的粒度
在目前的工作中,根據(jù)粒度的不同從大到小可以拆分成應(yīng)用域醇、模塊(jar包)台谊、包蓉媳、類等幾種。
子域與應(yīng)用
拆分的原則與過程
拆分最重要的原則是:領(lǐng)域體現(xiàn)的業(yè)務(wù)能力锅铅,也就是說拆分出來的子系統(tǒng)有沒有可能成為一個(gè)獨(dú)立的業(yè)務(wù)酪呻。這里獨(dú)立的業(yè)務(wù)更多針對(duì)的是應(yīng)用級(jí)別的,當(dāng)然也可以暫時(shí)把子域放到一個(gè)應(yīng)用中盐须,不過需要具備獨(dú)立出來的條件玩荠。就目前工作中較少遇到可以獨(dú)立應(yīng)用的機(jī)會(huì)。
拆分的過程:根據(jù)業(yè)務(wù)的流程贼邓,對(duì)每個(gè)業(yè)務(wù)流程進(jìn)行分析阶冈,看該業(yè)務(wù)流程是否符合獨(dú)立業(yè)務(wù)的條件(除了在目前的業(yè)務(wù)場(chǎng)景下使用,還有沒有可能為其他業(yè)務(wù)使用)塑径。
集成
集成是由雙方組成的女坑,依賴方與被依賴方,作為被依賴方统舀,也就是服務(wù)提供方堂飞,主要有兩種方式,一種是產(chǎn)品化方式绑咱,不提供業(yè)務(wù)定制化能力绰筛,提供的是標(biāo)準(zhǔn)服務(wù),例如支付寶的支付服務(wù)描融,短信的發(fā)送服務(wù)等铝噩;另外一種是供應(yīng)商方式,根據(jù)客戶的需求來定制一些服務(wù)接口窿克,在業(yè)務(wù)部門骏庸,一般都是供應(yīng)商模式。作為依賴方年叮,主要考慮是否新增防腐層具被,防腐層的好處是依賴倒置,可以隨時(shí)替換下游只损,方便測(cè)試等一姿,不過增加了模型轉(zhuǎn)換的成本。
jar包與package
在應(yīng)用內(nèi)部跃惫,一般會(huì)按照橫向的層級(jí)以及縱向的業(yè)務(wù)來劃分叮叹。
橫向的層級(jí)劃分按照領(lǐng)域驅(qū)動(dòng)分層一般如下。
jar包一般可以按照上面的模式來劃分爆存,不過也可以通過package的方式來組織蛉顽,只是一種邏輯的代碼組織方式,另外有一些公共的功能模塊也可以抽在這一層級(jí)先较,例如異常携冤、日志悼粮、注解等。
然后是領(lǐng)域模塊下面按照各個(gè)聚合來劃分縱向的業(yè)務(wù)包package曾棕。
類
最后是類的填充與細(xì)化扣猫,可以是契約導(dǎo)向的編碼,由外而內(nèi)睁蕾,因?yàn)橥獠康膱?chǎng)景是確定,內(nèi)部的模型可以通過場(chǎng)景來推到出來债朵。
其他
上面基本列出了從領(lǐng)域模型到代碼劃分的大概過程子眶,省略了很多細(xì)節(jié),不過可以作為實(shí)踐的一個(gè)指南序芦,后面會(huì)結(jié)合一些具體的實(shí)例進(jìn)行分析臭杰。