ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?
為什么要分層
- 高內(nèi)聚:分層的設(shè)計(jì)可以簡(jiǎn)化系統(tǒng)設(shè)計(jì),讓不同的層專注做某一模塊的事
- 低耦合:層與層之間通過(guò)接口或API來(lái)交互,依賴方不用知道被依賴方的細(xì)節(jié)
- 復(fù)用:分層之后可以做到很高的復(fù)用
- 擴(kuò)展性:分層架構(gòu)可以讓我們更容易做橫向擴(kuò)展
如果系統(tǒng)沒(méi)有分層,當(dāng)業(yè)務(wù)規(guī)模增加或流量增大時(shí)我們只能針對(duì)整體系統(tǒng)來(lái)做擴(kuò)展。分層之后可以很方便的把一些模塊抽離出來(lái),獨(dú)立成一個(gè)系統(tǒng)。
2、傳統(tǒng)MVC架構(gòu)
優(yōu)點(diǎn):關(guān)注前后端分離
缺點(diǎn):模型層分層太粗,融合了數(shù)據(jù)處理、業(yè)務(wù)處理等所有的功能。核心的復(fù)雜業(yè)務(wù)邏輯都放到模型層,導(dǎo)致模型層很亂
適應(yīng)場(chǎng)景:后端業(yè)務(wù)邏輯簡(jiǎn)單的服務(wù),比如接口直接提供對(duì)數(shù)據(jù)庫(kù)增刪改查
3、后端三層架構(gòu)
定義:
優(yōu)點(diǎn):邏輯與數(shù)據(jù)層分離
缺點(diǎn):模型層分層比較粗,核心的復(fù)雜業(yè)務(wù)邏輯都放到模型層,導(dǎo)致模型層很亂
適應(yīng)場(chǎng)景:后端業(yè)務(wù)邏輯簡(jiǎn)單的服務(wù),比如接口直接提供對(duì)數(shù)據(jù)庫(kù)增刪改查
4、阿里分層架構(gòu)
架構(gòu)來(lái)源:參照參照阿里發(fā)布的《阿里巴巴 Java 開(kāi)發(fā)手冊(cè) v1.4.0(詳盡版)》,將原先的三層架構(gòu)細(xì)化而來(lái)
特點(diǎn):添加了Manager 通用業(yè)務(wù)處理層。
這一層有兩個(gè)作用,一、可以將原先 Service 層的一些通用能力下沉到這一層,比如與緩存和存儲(chǔ)交互策略,中間件的接入;二、也可以在這一層封裝對(duì)第三方接口的調(diào)用,比如調(diào)用支付服務(wù),調(diào)用審核服務(wù)等RPC接口。
優(yōu)點(diǎn):相比于三層方式,添加了通用處理層對(duì)接外部平臺(tái)。 上下游對(duì)接劃分的比較清晰
缺點(diǎn):核心業(yè)務(wù)邏輯層沒(méi)有劃分
適應(yīng)場(chǎng)景:業(yè)務(wù)邏輯不復(fù)雜的常用業(yè)務(wù)
5、DDD分層架構(gòu)
(1)特點(diǎn)
優(yōu)點(diǎn):相比于三層方式,更關(guān)注領(lǐng)域服務(wù),即業(yè)務(wù)核心邏輯的劃分、收斂
缺點(diǎn):分層復(fù)雜, 如果業(yè)務(wù)邏輯簡(jiǎn)單沒(méi)有必要
適應(yīng)場(chǎng)景:業(yè)務(wù)復(fù)雜的業(yè)務(wù)
(2)和傳統(tǒng)三層架構(gòu)的對(duì)比
DDD四層架構(gòu)也基于傳統(tǒng)三層架構(gòu)的,不同點(diǎn)有以下幾方面:
6、整潔架構(gòu)和六邊形架構(gòu)
整潔架構(gòu)和六邊形架構(gòu)都是DDD架構(gòu)的一種方式,只不過(guò)是視角不同。
(1)整潔架構(gòu)
特點(diǎn):整潔架構(gòu)的層就像洋蔥片一樣,它體現(xiàn)了分層的設(shè)計(jì)思想
整潔架構(gòu)最主要的原則是依賴原則,它定義了各層的依賴關(guān)系,越往里依賴越低,代碼級(jí)別越高,越是核心能力。外圓代碼依賴只能指向內(nèi)圓,內(nèi)圓不需要知道外圓的任何情況。
(2)六邊形架構(gòu)
六邊形架構(gòu)又名“端口適配器架構(gòu)”。追溯微服務(wù)架構(gòu)的淵源,一般都會(huì)涉及到六邊形架構(gòu)。
六邊形架構(gòu)的核心理念是:應(yīng)用是通過(guò)端口與外部進(jìn)行交互的。我想這也是微服務(wù)架構(gòu)下API網(wǎng)關(guān)盛行的主要原因吧。
也就是說(shuō),在下圖的六邊形架構(gòu)中,紅圈內(nèi)的核心業(yè)務(wù)邏輯(應(yīng)用程序和領(lǐng)域模型)與外部資源(包括APP、Web應(yīng)用以及數(shù)據(jù)庫(kù)資源等)完全隔離,僅通過(guò)適配器進(jìn)行交互。它解決了業(yè)務(wù)邏輯與用戶界面的代碼交錯(cuò)問(wèn)題,很好地實(shí)現(xiàn)了前后端分離。六邊形架構(gòu)各層的依賴關(guān)系與整潔架構(gòu)一樣,都是由外向內(nèi)依賴。
7、匯總
本文匯總了傳統(tǒng)MVC架構(gòu)、后端三層架構(gòu)、阿里分層架構(gòu)、DDD架構(gòu)以及基于DDD架構(gòu)的整潔架構(gòu)和六邊形架構(gòu)。從前往后越來(lái)越復(fù)雜,其他也對(duì)應(yīng)著軟件工程的越來(lái)越復(fù)雜,架構(gòu)模式也變的越來(lái)越復(fù)雜。軟件架構(gòu)領(lǐng)域沒(méi)有一招鮮吃遍天的功法,針對(duì)的不同的業(yè)務(wù)場(chǎng)景采用不同的架構(gòu),并且隨著業(yè)務(wù)的發(fā)展,不斷調(diào)整架構(gòu)以適應(yīng)業(yè)務(wù)的發(fā)展,以變(架構(gòu)、技術(shù)組件、重構(gòu)等)應(yīng)不變(業(yè)務(wù)發(fā)展、用戶體驗(yàn)、穩(wěn)定性等)才是一個(gè)合格的軟件工程師應(yīng)追求的境界。
原文鏈接:https://juejin.cn/post/6907828643062513671
如果覺(jué)得本文對(duì)你有幫助,可以轉(zhuǎn)發(fā)關(guān)注支持一下
總結(jié)
以上是生活随笔為你收集整理的ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: shell脚本读取csv_shell s
- 下一篇: hadoop本地模式部署_hadoop启