項目架構實戰:分層架構規範的Demo以及微服務架構的演進

請先參考

項目架構規範:阿里規約,MVC架構以及三層架構(一)

https://blog.csdn.net/lin451791119/article/details/106348414

項目架構規範:阿里規約,MVC架構以及三層架構(二)

https://blog.csdn.net/lin451791119/article/details/106378277

項目架構規範:阿里規約,MVC架構以及三層架構(三)

https://blog.csdn.net/lin451791119/article/details/106396958

分層目錄要點

  1. 嚴格區分每層的職責
  2. 嚴格確定分層的調用鏈路
  3. 嚴禁使用map/json等格式做數據傳遞
  4. 嚴禁使用BeanUtil.Copy等方法轉換

分層目錄結構

總體分爲應用層、業務領域層和基礎設施層

 

應用層

應用層用於接收外部的請求,是整個系統所提供能力的外觀,包含API、MQ-Listener等。專用於處理和業務無關的操作,包含驗籤、參數校驗、攔截等處理,不實現業務邏輯通過編排業務領域和外部請求,對外提供細粒度的能力

  • API:接收來自外部的HTTP請求,只做參數校驗、業務領域數據組裝、業務邏輯編排和響應請求
  • MQ:監聽消息隊列的請求,不做業務處理
  • Model:用於封裝外部的請求參數、封裝響應外部參數,與底層數據存儲的結構完全無關
  • Assembler:用於Model與業務領域層的Model之間的相互轉換工作,例如:使用反射機制自動beanutils相互轉換
  • Configuration:全局的配置信息或處理,例如:全局參數校驗機制、全局異常處理等

業務領域層

業務領域層主要用於實現業務邏輯,包含業務規則、策略和流程

  • Model:用於接收或響應來自應用層的業務屬性,同時可承載Model的行爲避免失血模型。業務層只負責業務,與具體的表現形式無關,所以它返回的Model不應該出現與表現形式的耦合。
  • Repository:倉儲層用於對持久化通用操作的封裝,將領域對象持久化,屏蔽了持久化層的特性
  • Service:處理業務邏輯,對Repository和External的操作編排
  • External:封裝對外部的請求,包含了請求的定義、參數等

基礎設施層

基礎設施層爲以上各層提供技術支持,例如持久化操作、公用的操作等

  • Commons:共用的操作類、工具類等
  • Persistence:直接面向DB的操作

命名規範

名稱 描述 所屬分層 示例 備註
Client Request 客戶端請求入參對象 Facade.model UserRequest  
Client Response 客戶端請求響應對象 Facade.model UserResponse  
Domain Object 領域對象 Biz.domain UserDomain  
Value Object 值對象 Biz.domain UserVO  
Domain Factory 領域工廠 Biz.domain UserFactory 創建Domain Object
Repository 倉庫 Biz.domain UserRepository 對Domain Object的持久化
Service 業務邏輯 Biz.service UserService 處理業務邏輯
External Request 請求外部對象 Biz.external.model UserExtRequest 請求外部接口的入參
External Response 請求外部對象 Biz.external.model UserExtResponse 接收外部接口的響應
Data Object 數據庫對象 Infrastructure.persistence.entity User  
Dao Object 數據庫操作對象 Infrastructure.persistence.mapper UserMapper  

爲什麼要分出這個external這個包,是爲了以後向微服務架構轉型,尤其是Spring+Feign,會帶來極大的便利!如果請求遠程的服務和服務器提供的服務混雜在一起,整理項目的時候會十分混亂!

分層調用路徑

 

目標 所屬層操作 備註
Client Request Domain Object Domain.factory  
Domain Object Data Object Domain.Repository 意味着Domain Object可以出現在Factory、Service和Repository層
Domain Object Client Response Facade.api 拿到業務層的返回的Domain Object後,轉換成客戶端能識別的Client Response
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章