天天看點

分層軟體架構及其資料解耦1. 分層軟體架構2. 各軟體層間的資料解耦和轉換

1. 分層軟體架構

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

分層軟體架構及其資料解耦1. 分層軟體架構2. 各軟體層間的資料解耦和轉換
分層軟體架構及其資料解耦1. 分層軟體架構2. 各軟體層間的資料解耦和轉換

分層的實質是隔離關注點,使得每一層具有一緻的行為,這樣不同的開發才有可能關注不同的軟體層。如WEB開發中常用的前後端分離,前端關注的是使用者體驗,後端關注的是穩定可靠的服務。再比如DDD中主張将領域和應用進行分離,進而能夠獲得一個比較穩定的領域能力層。

解耦的本質是分離變化點,将不同的變化點分離到不同的層次或子產品中,使得其職責更單一,進而有利于軟體的開發、維護和擴充。

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

分、解、合中,分和解是軟體研發組織内部的訴求,不是使用者訴求,主要完成使用者界面、業務邏輯和資料存儲幾大類任務的分層和解耦。合是基于分和解的結果,實際是其難度更大,否則會造成合的結果耦合過重導緻難于維護。是以,分和解時要考慮到合,隻有同時考慮到分、解、合的架構才是一個完整的架構。

2. 各軟體層間的資料解耦和轉換

采用分層的軟體架構後,在各個軟體層上都要有自己的資料模型,但由于使用者業務的完整性,各個軟體層的資料又需要互相轉換,進而完成軟體的“分”與“合”。各個軟體層的資料模型一般要滿足如下限制:

  • 每個軟體層隻能使用自己的資料模型
  • 軟體層間的資料模型通過轉換器互相轉換

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

  • VO(View Object):視圖對象,用于表示層,它的作用是封裝頁面(或元件)的資料
  • DTO(Data Transfer Object):資料傳輸對象,用于表示層與服務層之間的資料傳輸對象
  • DO(Domain Object):領域對象,從現實世界中抽象出來的有形或無形的業務實體
  • PO(Persistent Object):持久化對象,它跟持久層(通常是資料庫)的資料結構形成一一對應的映射關系,如果持久層是關系型資料庫,那麼,資料表中的每個字段(或若幹個)就對應PO的一個(或若幹個)屬性

其中,各個資料模型的轉換關系如下:

分層軟體架構及其資料解耦1. 分層軟體架構2. 各軟體層間的資料解耦和轉換
  • 使用者送出請求,其請求中的資料在UI層表示為VO
  • UI層把VO轉換為業務層對應方法所要求的DTO并傳送給服務層(在WEB開發中,DTO為API接收到的參數)
  • 業務層首先根據DTO的資料構造(或重建)一個DO,調用DO的業務方法完成具體業務
  • 業務層把DO轉換為存儲層對應的PO,調用相應的存儲層的持久化方法,把PO傳遞給它,完成存儲操作
  • 對于逆向操作,如讀取,也采取類似的方法進行轉換和傳遞

個人部落格位址

繼續閱讀