一種架構(gòu)實踐:自上而下的分解與自下而上的抽象

這種方法是內(nèi)網(wǎng)中的一篇文章,我覺得很有實踐意義,就利用自己的理解重新梳理一下。

當(dāng)我們拿到一個需求,從小需求到項目再到新系統(tǒng)的搭建,應(yīng)該都是有一套方法論可以指導(dǎo)落地。如果按照DDD的方式來落地架構(gòu)的話,一般系統(tǒng)可以分成三層,從內(nèi)到外分別是領(lǐng)域模型層、領(lǐng)域服務(wù)層、應(yīng)用服務(wù)層,可以對外接口還會有一層,例如微服務(wù)接口,web接口等。那么我們需要做的就是將需求轉(zhuǎn)換成上面的層級結(jié)構(gòu)。

需求分解

需求分解的目的是得到用例(User Case),在互聯(lián)網(wǎng)企業(yè)中技術(shù)得到的往往是一個PRD,是對一個需求的流程描述,屬于一個比較粗粒度的描敘,只是一個主干流程,沒有細(xì)化到一個個用例,也么有對于異常情況進(jìn)行描敘。

邊界劃分

邊界劃分是按照一定規(guī)則與約束將User Case涉及的功能劃分到不同的域,可以是不同的系統(tǒng),也可以是同一個系統(tǒng)中的不同的域中。

一個沒有任何規(guī)則約束的隨意設(shè)計會產(chǎn)生一些無法理解的整體含義且很難維護(hù)的系統(tǒng)。

邊界劃分可以利用單一職責(zé)作規(guī)則為主要的約束,但是職責(zé)并不是一個太好量化的東西,在之前如何編寫類中思考了一些方法。另外《UML和應(yīng)用模式》中的GRASP也可以用來輔助劃分,引用內(nèi)網(wǎng)一篇文章的圖片


用例拆解

當(dāng)已經(jīng)劃分好邊界,那就可以對每個用例進(jìn)行分解,分解成每個小的步驟,然后對每個步驟進(jìn)行聚類分組,形成如下的層級結(jié)構(gòu):Commond -> Phase -> Step。

模型的沉淀

用例拆解將每個用戶拆解成了一個數(shù)據(jù)執(zhí)行的pipeline,但是系統(tǒng)中的模型業(yè)務(wù)語義表達(dá)能力不強(qiáng),因此需要不斷的梳理出系統(tǒng)中重復(fù)的地方,然后進(jìn)行能力的下沉,找到這些邏輯真正的歸屬。


總結(jié)

利用上面幾步基本可以完成需求到架構(gòu)的落地,尤其是用例的拆解與模型的沉底,實踐起來比較容易。

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

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

  • 6.1 需求分析建模的要點與誤區(qū) 6.1.1 需求分析到底做什么 需求分析的任務(wù)不是分析系統(tǒng)如何實現(xiàn)用戶的需要,而...
    Seymoure閱讀 3,821評論 0 11
  • 一、 軟件測試基本概念 1 bug的概念 bug類型:defect、fault、problem、error… pr...
    三口一個瓜閱讀 4,017評論 0 12
  • 轉(zhuǎn)眼又是半年,半年以前兩天不說話就難過到不知道怎么辦,眼淚一顆一顆的往下掉?,F(xiàn)在轉(zhuǎn)眼就是七天,從兩句話到現(xiàn)在,接不...
    含光君is_watchingU閱讀 237評論 0 0
  • 總算是完成了,看來只要下定決心加上仔細(xì)地思考研究總是可以辦到的嘛,小伙子,還是蠻開心的,雖然這么晚,我第一次體會到...
    cqmudhw閱讀 235評論 0 0
  • 看到日更活動蠻久了,但是一直沒有參加,會覺得自己怕是堅持不下來。但是,忽然之間就想嘗試了。 算是簡書的一個新伙伴,...
    南方的暖陽閱讀 96評論 0 1

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