分層架構設計總結

一、單體結構不分層

最開始開發項目時,由於需求較少,用一個單獨的工程文件就可以滿足開發的需求了,不需要進行劃分。

二、MVC 分層和三層

到後面需求越來越多,於是就把文件進行分解,怎麼分解?有人提出了 MVC 的分層方式。

MVC 分層是一個 3 層結構,將整個應用劃分爲:

  • M:model 模型層,用於封裝應用業務邏輯相關數據和對數據處理方法。
  • V:view 表現層,把數據展示給用戶。
  • C:controller,控制器,把不同層組織起來,用來控制程序的流程。

image-20220917204338558

最有名的框架就是 Spring MVC。Spring MVC 架構如下:

image-20220917204716167

如果從業務角度來分 3 層:

  • 數據庫訪問層(DAO)
  • 業務邏輯層(Business)
  • 表現層(UI)

java 代碼的包分層:

  • controller:控制層,輸出數據到表示層
  • dao:數據庫訪問層,對數據庫訪問的操作
  • entity:model 實體層,把數據庫表字段的映射到 java 代碼
  • service:業務邏輯層,有的也會直接把文件夾命名爲 business

在 java 項目中,一些資源會放在 resources 裏,比如 js,css,html,配置文件等

  • resources
    • UI(CSS, HTML) 表示層

三、N 層架構

N 層架構是在三層架構上的進一步細分。

image-20220917211205812

(www.herbertograca.com)

  • 原生瀏覽器應用程序,渲染和運行用戶界面,向服務器應用發送請求;
  • 應用服務器,包括了展現層、應用層、領域層和持久化層;
  • 數據庫服務器,應用服務器用它來完成數據的持久化。

這個由三層架構變化而來的 N 層架構,儘管用戶界面是在客戶瀏覽器渲染和運行,但是用戶界面是在存於服務器上並在它上面編譯,它解決了

客戶端更新問題。

四、領域驅動設計DDD用到的架構

Eric Evans 於 2003 年出版了《領域驅動設計:軟件核心複雜性應對之道》,在書中他創造了領域驅動設計方法

image-20220917220014878

image-20220917220340157

五、EBI 架構

EBI 架構(Entity-Boundary-Interactor,實體-邊界-交互器)。

Ivar Jacobson 早在 1992 年就在他的著作 Object-Oriented Software Engineering: A use case driven approach中提出了這個模式。

那時,Jacobson 實際上把它叫做實體-接口-控制(Entity-Interface-Control),但是後來改成了 EBI,避免“接口”和編程語言中的結構“接口”混淆,以及“控制”和 MVC 中的控制器混淆。

六、端口和適配器架構(六邊形架構)

2005年,Alistair Cockburn構思了端口和適配器架構 (又稱六邊形架構)並記錄在他的博客中。

image-20220917214531386

(www.herbertograca.com)

七、洋蔥架構

2008 年 Jeffrey Palermo 提出了洋蔥架構 。它在端口和適配器架構中貫徹了將領域放在應用中心。

image-20220917211934241

(www.herbertograca.com)

它明確了端口和適配器中關於依賴的方向:

  • 外層依賴內層。
  • 內層對外層無感知。

耦合的方向是從外層指向中心,它提供了一個完全獨立的對象模型(領域模型),該模型位於架構的核心,不依賴其它任何層次。我們擁有了在不影響內層的情況下改變外層的靈活性。

洋蔥架構的關鍵原則:

  • 圍繞獨立的對象模型構建應用
  • 內層定義接口,外層實現接口
  • 依賴的方向指向圓心
  • 所有的應用代碼可以獨立於基礎設施編譯和運行

—— Jeffrey Palermo 2008, The Onion Architecture: part 3

八、整潔架構

Robert C. Martin(大名鼎鼎的 Uncle Bob)於2012年在他的一篇博客中發表了整潔架構的觀點,並在一些會議上做了關於該架構的演講。站在 EBI 架構、六邊形架構和洋蔥架構的肩膀上的架構。

image-20220917215122346

九、清晰架構

https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/

融合 DDD、洋蔥架構、整潔架構、CQRS 等的架構。

image-20220917215723499

十、參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章