国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐框架-COLA的解讀

這篇具有很好參考價(jià)值的文章主要介紹了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐框架-COLA的解讀。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

引言

? ? ? ? Cola作為當(dāng)前比較優(yōu)秀的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)最佳實(shí)踐框架越來越被更多的技術(shù)人所知曉。先拋出COLA 4.0:應(yīng)用架構(gòu)的最佳實(shí)踐_張建飛(Frank)的博客-CSDN博客_cola架構(gòu)?是關(guān)于COLA4.0最新的內(nèi)容介紹。然后個(gè)人對(duì)于讀了這篇文章后,對(duì)于其中的架構(gòu)理念和其中的各組件的設(shè)計(jì)加了一點(diǎn)個(gè)人解讀來分享。

? ? ? ? 主要分為兩部分來進(jìn)行分析,一個(gè)架構(gòu),一個(gè)組件。架構(gòu)主要想分析他的分層結(jié)構(gòu)對(duì)于我們做技術(shù)架構(gòu)設(shè)計(jì)和模塊劃分有的指導(dǎo)意義。組件主要就是對(duì)于一些編程的方法來解耦業(yè)務(wù)的最佳方法論。

COLA架構(gòu)解析

下圖轉(zhuǎn)載?COLA 4.0:應(yīng)用架構(gòu)的最佳實(shí)踐_張建飛(Frank)的博客-CSDN博客_cola架構(gòu)

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐框架-COLA的解讀

?垂直拆分

? ? ? ? 從上往下分別有

  • VO:ViewObject? 視圖 也就是給用戶看的數(shù)據(jù),也稱為Controller層
  • DTO:? DomainTransferObject 領(lǐng)域轉(zhuǎn)化對(duì)象 也就是領(lǐng)域?qū)ο筠D(zhuǎn)換后的對(duì)象,也稱為Service層
  • Entity:? Entity 實(shí)體? 也就是代表具體有行為的實(shí)際對(duì)象,也成為Domain層
  • DO: DomainObject? 領(lǐng)域?qū)ο?,也就是領(lǐng)域?qū)ο螅A(chǔ)設(shè)施層

? ? ? ? 為什么會(huì)產(chǎn)生這樣的分層呢?我從最原始的時(shí)候開始說明,解說這個(gè)演變過程。

????????最早的時(shí)候還是單體服務(wù)時(shí)候,也沒有領(lǐng)域概念,有DAO層,實(shí)體層,服務(wù)(Service)層,控制(Controller)層,視圖(View)層。后來為了提升開發(fā)效率,展示層和邏輯徹底分離,就有了前后端分離的技術(shù),就弱化了視圖層。只有控制層,形成統(tǒng)一的MVC架構(gòu)。

? ? ? ? 后來業(yè)務(wù)發(fā)展越來越多樣化,視圖層對(duì)于數(shù)據(jù)結(jié)構(gòu)的需求越來越多,為了響應(yīng)這種變化,同時(shí)保持業(yè)務(wù)的擴(kuò)展性,就得在視圖層和實(shí)體層增加一層數(shù)據(jù)轉(zhuǎn)化層,用來應(yīng)對(duì)各種各樣的場(chǎng)景下的視圖,就形成了DAO層,實(shí)體層,DTO層,服務(wù)(Service)層,控制(Controller)層。

? ? ? ? 緊接著互聯(lián)網(wǎng)進(jìn)一步發(fā)展,業(yè)務(wù)進(jìn)一步擴(kuò)大,單體服務(wù)已經(jīng)不能滿足需求,就有了微服務(wù)。這時(shí)候服務(wù)的能力就進(jìn)而被拆分成多層,有聚合層和基礎(chǔ)服務(wù)層。此時(shí)分層服務(wù)層需求還可以滿足,但是聚合層的話就難以清晰的表達(dá)了。因?yàn)榫酆蠈涌赡軙?huì)涉及到多個(gè)也業(yè)務(wù)域,而不同的業(yè)務(wù)域?qū)τ诰酆蠈觼碇v又不能是實(shí)體層,也不能是服務(wù)層。因?yàn)槿绻麑?shí)體層,聚合服務(wù)內(nèi)的領(lǐng)域邊界就很難清晰。如果是服務(wù)層,那么聚合服務(wù)的本身的服務(wù)層就被污染了。所以很多微服務(wù)的框架引入了一個(gè)Model層,他直接在聚合層把不同業(yè)務(wù)域分在不同的Model里面。不過此方案對(duì)于開發(fā)工作者來說有較高的要求,需要他能很好的了解領(lǐng)域劃分。

? ? ? ? 后來就進(jìn)行了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),這個(gè)要滿足的就是以領(lǐng)域驅(qū)動(dòng),還有就是編程思想的轉(zhuǎn)變,以充血模型替代原來的貧血模型。他認(rèn)為對(duì)象除了有屬性職位還應(yīng)該有行為,有動(dòng)作,從而達(dá)到完整的對(duì)象的目的。屬性和行為密不可分的。所以將實(shí)體層和DAO層整合到一起形成基礎(chǔ)設(shè)施層。當(dāng)從基礎(chǔ)設(shè)施完成了對(duì)象的構(gòu)造之后就形成了領(lǐng)域?qū)?,就是領(lǐng)域?qū)ο?。?shí)體層同時(shí)也需要定義對(duì)象的實(shí)際行為,基本的增刪改查等等。DTO層保留,控制層和視圖層也保留。但是這個(gè)時(shí)候DTO雖然依然是進(jìn)行數(shù)據(jù)轉(zhuǎn)化,但是他是嚴(yán)格遵循業(yè)務(wù)過程中領(lǐng)域上下文(AddCustomerCmd)的數(shù)據(jù)轉(zhuǎn)化。

@Extension(bizId = Constants.BIZ_1)
public class CustomerBizOneConvertorExt  implements CustomerConvertorExtPt {

    @Autowired
    private CustomerConvertor customerConvertor;//Composite basic convertor to do basic conversion

    @Override
    public CustomerEntity clientToEntity(AddCustomerCmd addCustomerCmd){
        CustomerEntity customerEntity = customerConvertor.clientToEntity(addCustomerCmd);
        CustomerDTO customerDTO =addCustomerCmd.getCustomerDTO();
        //In this business, AD and RFQ are regarded as different source
        if(Constants.SOURCE_AD.equals(customerDTO.getSource()))
        {
            customerEntity.setSourceType(SourceType.AD);
        }
        if (Constants.SOURCE_RFQ.equals(customerDTO.getSource())){
            customerEntity.setSourceType(SourceType.RFQ);
        }
        return customerEntity;
    }
}

此時(shí)的各個(gè)層之間的交互數(shù)據(jù)不再是對(duì)象或者其他,而只能是有領(lǐng)域邊界定義的限界上下文。領(lǐng)域的劃分和限界上下文的定義,請(qǐng)參考?猿創(chuàng)征文|微服務(wù)架構(gòu)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)_劍飛的編程思維的博客-CSDN博客_微服務(wù)拆分 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

水平拆分

? ? ? ? 從左往右分別有

  • VO:手機(jī)端,小程序端,瀏覽器端,消息,調(diào)度任務(wù)
  • DTO:? 服務(wù),執(zhí)行器
  • Entity:? 接口,模塊,能力
  • DO: 接口實(shí)現(xiàn),倉(cāng)庫(kù),配置

? ? ? ? 水平拆分的目的是在于在同一個(gè)邏輯層次,由于應(yīng)用域不一樣,使用的方法差別比較大,比如手機(jī)端和小程序端返回的數(shù)據(jù)差別和功能迭代差別較大,所以需要拆分到不同的類別。再就是執(zhí)行器和服務(wù),服務(wù)完成了功能,但是有時(shí)候再執(zhí)行服務(wù)的時(shí)候可能會(huì)有相關(guān)聯(lián)的業(yè)務(wù)操作,這個(gè)時(shí)候需要用執(zhí)行器包裝,但是他要跟服務(wù)解耦,所以要拆分。防腐層,模塊和能力都是根據(jù)具體的業(yè)務(wù)做的一個(gè)劃分,主要是是根據(jù)職責(zé)劃分。踐行單一職責(zé)原則,迪米特法則。

COLA組件

? ? ? ? 組件解決是是我們?cè)偃粘i_發(fā)服務(wù)中經(jīng)常要用到的一些功能,封裝后我們可以直接復(fù)用。同時(shí)也是可以規(guī)范我們的開發(fā)能力,不會(huì)導(dǎo)致代碼風(fēng)格混亂,從而提升開發(fā)效率。

Catchlog組件

? ? ? ? 通過定義切面,對(duì)于請(qǐng)求處理前后,進(jìn)行日志打印,接口監(jiān)控。同時(shí)定義響應(yīng)體的統(tǒng)一處理接口,為統(tǒng)一處理提供一個(gè)可擴(kuò)展點(diǎn)

Domain組件

? ? ? ? 通過多例模式,實(shí)現(xiàn)了充血模型的開發(fā)。為什么要用多例?首先Spring的創(chuàng)建的Bean模式單例的,然后充血模型的實(shí)例中是有屬性的,那么他的行為只能在當(dāng)前線程中安全,如果是單例,那么線程不安全,所以必須要是多例模式。應(yīng)用了工廠模式生成多例。

DTO組件

? ? ? ? 定義數(shù)據(jù)轉(zhuǎn)換的基本結(jié)構(gòu),父類ClientObject,Command,Response,DTO等等,擴(kuò)展點(diǎn)名稱等統(tǒng)一定義父類,形成多態(tài),定義轉(zhuǎn)化數(shù)據(jù)的基本規(guī)范和職責(zé)

Exception組件

? ? ? ? 定義服務(wù)中的異常,系統(tǒng)異常,業(yè)務(wù)異常,檢查異常

Extention組件

? ? ? ? 擴(kuò)展點(diǎn)的定義以及組裝,通過函數(shù)接口,提取出擴(kuò)展點(diǎn),如圖

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐框架-COLA的解讀

?函數(shù)接口,以及starter組裝,擴(kuò)展點(diǎn)的適配緩存都是較好的編程風(fēng)格

StateMachine組件

? ? ? ? 這個(gè)狀態(tài)機(jī)的核心思想就是把一些狀態(tài)流程,流程化的開發(fā)通過定義全局結(jié)構(gòu),實(shí)現(xiàn)邏輯和代碼的接口。核心的就是泛型的使用,狀態(tài)流轉(zhuǎn)的對(duì)象就是變更前,變更后,然后上下文主要對(duì)象。

????????除了以上的組件外,在開發(fā)中我們可能對(duì)于一些基本的操作都需要封裝成組件,以供開發(fā)規(guī)范使用。

總結(jié)

? ? ? ? 分析Cola除了我們可以在開發(fā)過程中去直接引用這個(gè)框架外,更重要的是我們可以改變我們的編程思維去學(xué)習(xí)這個(gè)思考過程,學(xué)習(xí)編程方法,應(yīng)用到我們實(shí)際的項(xiàng)目中,讓我們朝著更優(yōu)秀的程序員前進(jìn)。

????????文章來源地址http://www.zghlxwxcb.cn/news/detail-436993.html

????????

到了這里,關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)踐框架-COLA的解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【架構(gòu)設(shè)計(jì)】阿里開源架構(gòu)Cola4.0的項(xiàng)目實(shí)踐:訂單系統(tǒng)

    【架構(gòu)設(shè)計(jì)】阿里開源架構(gòu)Cola4.0的項(xiàng)目實(shí)踐:訂單系統(tǒng)

    使用SpringBoot+MybaitsPlus+Cola(整潔面向?qū)ο蠓謱蛹軜?gòu))4.0重構(gòu)訂單功能 Gitee:https://gitee.com/charles_ruan/smile-cola Github:https://github.com/charles0719/smile-cola 新增 POST http://localhost:8080/order/add 修改 POST http://localhost:8080/order/edit 訪問詳情 GET http://localhost:8080/order/1 分頁(yè)查詢 POST http://localho

    2024年02月14日
    瀏覽(42)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)——DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)進(jìn)階

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)——DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)進(jìn)階

    進(jìn)階篇主要講解領(lǐng)域事件、DDD 分層架構(gòu)、幾種常見的微服務(wù)架構(gòu)模型以及中臺(tái)設(shè)計(jì)思想等內(nèi)容。如何通過領(lǐng)域事件實(shí)現(xiàn)微服務(wù)解耦?、怎樣進(jìn)行微服務(wù)分層設(shè)計(jì)?、如何實(shí)現(xiàn)層與層之間的服務(wù)協(xié)作?、通過幾種微服務(wù)架構(gòu)模型的對(duì)比分析,讓你了解領(lǐng)域模型和微服務(wù)分層的作

    2024年01月15日
    瀏覽(21)
  • 《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》:從領(lǐng)域視角深入倉(cāng)儲(chǔ)(Repository)的設(shè)計(jì)和實(shí)現(xiàn)

    《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》:從領(lǐng)域視角深入倉(cāng)儲(chǔ)(Repository)的設(shè)計(jì)和實(shí)現(xiàn)

    一、前言 “ DDD設(shè)計(jì)的目標(biāo)是關(guān)注領(lǐng)域模型而并非技術(shù)來創(chuàng)建更好的軟件,假設(shè)開發(fā)人員構(gòu)建了一個(gè)SQL,并將它傳遞給基礎(chǔ)設(shè)施層中的某個(gè)查詢服務(wù)然后根據(jù)表數(shù)據(jù)的結(jié)構(gòu)集取出所需信息,最后將這些信息提供給構(gòu)造函數(shù)或者Factory,開發(fā)人員在做這一切的時(shí)候早已不把模型看

    2024年02月08日
    瀏覽(20)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之認(rèn)知篇

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之認(rèn)知篇

    作為技術(shù)人,都有一個(gè)成為大牛的夢(mèng)。 有些人可以通過自己掌握了比較底層、有深度、有難度的技術(shù)來證明自己的能力。 但對(duì)于絕大多數(shù)的應(yīng)用研發(fā)工程師來說,其大部分的時(shí)間精力,會(huì)被消耗在讀不懂、講不清的屎山代碼中,以及復(fù)雜多變的業(yè)務(wù)迭代中。很少會(huì)有需要去

    2024年02月08日
    瀏覽(22)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)四論

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)四論

    ? ? 經(jīng)過多年的研究與思考,實(shí)踐與總結(jié),本人逐漸對(duì) DDD 有所領(lǐng)悟,本文以一個(gè)較短的篇幅,提綱挈領(lǐng)地梳理出 DDD 的核心脈絡(luò),希望與各位做一探討。 1776 年亞當(dāng)斯密發(fā)表《國(guó)富論》,標(biāo)志著經(jīng)濟(jì)學(xué)的誕生。2004 年,一本名為《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)·軟件核心復(fù)雜性應(yīng)對(duì)之道》的

    2024年02月08日
    瀏覽(23)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)入門指南

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)入門指南

    ? 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain-Driven Design,簡(jiǎn)稱DDD)是一種軟件架構(gòu)風(fēng)格,它強(qiáng)調(diào)在軟件開發(fā)過程中緊密關(guān)注業(yè)務(wù)需求和領(lǐng)域知識(shí)。本文將簡(jiǎn)要介紹領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的核心概念,幫助人開始學(xué)習(xí)和實(shí)踐領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。 什么是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)? 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是一種軟件開發(fā)方法,它側(cè)重

    2024年02月11日
    瀏覽(29)
  • DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(六)

    領(lǐng)域?qū)ο笮枰Y源存儲(chǔ)。存儲(chǔ)手段多樣化,常見就是數(shù)據(jù)庫(kù),分布式緩存,localCache.資源庫(kù)的作用,就是對(duì)領(lǐng)域的存儲(chǔ)和訪問進(jìn)行統(tǒng)一管理對(duì)象。在抽獎(jiǎng)平臺(tái)中。通過下面這種方式組織資源庫(kù)。

    2024年01月24日
    瀏覽(22)
  • 05.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):掌握領(lǐng)域事件,解耦微服務(wù)的關(guān)鍵

    05.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):掌握領(lǐng)域事件,解耦微服務(wù)的關(guān)鍵

    目錄 1、概述 2、領(lǐng)域事件 2.1 如何識(shí)別領(lǐng)域事件 1.微服務(wù)內(nèi)的領(lǐng)域事件 2.微服務(wù)之間的領(lǐng)域事件 3、領(lǐng)域事件總體架構(gòu) 3.1 事件構(gòu)建和發(fā)布 3.2 事件數(shù)據(jù)持久化 3.3 事件總線 (EventBus) 3.4 消息中間件 3.5 事件接收和處理 4、案例 5、總結(jié) 1、概述 在事件風(fēng)暴(Event Storming)時(shí),我們

    2024年02月22日
    瀏覽(19)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain Driven Design)之建立領(lǐng)域模型

    在實(shí)際項(xiàng)目中,模型設(shè)計(jì)者往往過早陷入具體構(gòu)造塊類型的識(shí)別,比如實(shí)體、聚合、領(lǐng)域服務(wù),而忽略了領(lǐng)域模型表達(dá)領(lǐng)域概念的目的。我們應(yīng)該基于領(lǐng)域概念設(shè)計(jì)領(lǐng)域模型,然后再采用合適的模式降低領(lǐng)域模型的復(fù)雜度,進(jìn)一步增加領(lǐng)域模型的表達(dá)能力。 領(lǐng)域模型的作用,

    2024年02月03日
    瀏覽(18)
  • 聊一聊對(duì)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中“領(lǐng)域”這個(gè)詞語的理解與分析方法

    百度百科對(duì)領(lǐng)域的解釋: 領(lǐng)域具體指一種特定的范圍或區(qū)域 領(lǐng)域一般指的是業(yè)務(wù)的問題域,領(lǐng)域是有邊界的,邊界內(nèi),規(guī)定了我們要做什么,要做的范圍,軟件項(xiàng)目從開始到交付的過程中, 所有涵蓋的業(yè)務(wù),每個(gè)業(yè)務(wù)模塊或者方向都有自己的業(yè)務(wù)范圍和問題 比如做家裝行業(yè)

    2023年04月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包