分層軟件架構及其數據解耦

1. 分層軟件架構

分層架構是軟件的軟件中最常用的架構設計方法,如clean架構、MVP架構等。

Clean架構MVP架構
分層的實質是隔離關注點,使得每一層具有一致的行爲,這樣不同的開發纔有可能關注不同的軟件層。如WEB開發中常用的前後端分離,前端關注的是用戶體驗,後端關注的是穩定可靠的服務。再比如DDD中主張將領域和應用進行分離,從而能夠獲得一個比較穩定的領域能力層。

解耦的本質是分離變化點,將不同的變化點分離到不同的層次或模塊中,使得其職責更單一,從而有利於軟件的開發、維護和擴展。

因爲用戶對其完成某一系列業務case的完整性並沒有隨着解耦而消失,因此在分層的軟件架構中除了分和解,還要有合。通過聚合層、各類中間件sdk等來完成用戶的具體業務case。

分、解、閤中,分和解是軟件研發組織內部的訴求,不是用戶訴求,主要完成用戶界面、業務邏輯和數據存儲幾大類任務的分層和解耦。合是基於分和解的結果,實際是其難度更大,否則會造成合的結果耦合過重導致難於維護。因此,分和解時要考慮到合,只有同時考慮到分、解、合的架構纔是一個完整的架構。

2. 各軟件層間的數據解耦和轉換

採用分層的軟件架構後,在各個軟件層上都要有自己的數據模型,但由於用戶業務的完整性,各個軟件層的數據又需要相互轉換,從而完成軟件的“分”與“合”。各個軟件層的數據模型一般要滿足如下約束:

  • 每個軟件層只能使用自己的數據模型

  • 軟件層間的數據模型通過轉換器相互轉換

分層架構中常用的數據模型是VO、DTO、 DO和PO,解析如下:

  • VO(View Object):視圖對象,用於表示層,它的作用是封裝頁面(或組件)的數據

  • DTO(Data Transfer Object):數據傳輸對象,用於表示層與服務層之間的數據傳輸對象

  • DO(Domain Object):領域對象,從現實世界中抽象出來的有形或無形的業務實體

  • PO(Persistent Object):持久化對象,它跟持久層(通常是數據庫)的數據結構形成一一對應的映射關係,如果持久層是關係型數據庫,那麼,數據表中的每個字段(或若干個)就對應PO的一個(或若干個)屬性

其中,各個數據模型的轉換關係如下:
VO、DTO、DO、PO相互轉換

  • 用戶發出請求,其請求中的數據在UI層表示爲VO

  • UI層把VO轉換爲業務層對應方法所要求的DTO並傳送給服務層(在WEB開發中,DTO爲API接收到的參數)

  • 業務層首先根據DTO的數據構造(或重建)一個DO,調用DO的業務方法完成具體業務

  • 業務層把DO轉換爲存儲層對應的PO,調用相應的存儲層的持久化方法,把PO傳遞給它,完成存儲操作

  • 對於逆向操作,如讀取,也採取類似的方法進行轉換和傳遞

個人博客地址

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