跟着“土牛”学架构知识
這里的土牛是指abp的作者,土耳其人,簡稱“土?!?#xff0c;前兩天看了他分享的ppt,這里做個小筆記。
架構分層
圖一(abp作者)
圖二(clean架構)
圖三(在朋友圈看到的)
每種架構沒有好壞,只要是流行的,適合自己的就好。一種架構不管是否完全運用DDD思想,不重要,合理的分層是必須的!
表現層
應用層(用例)
領域層
基礎設施層
領域驅動的核心構件
最佳實踐
Repositories 原則
repository 是一個類似于集合的接口,可與數據庫交互以讀取和寫入實體
在domain layer定義接口,在infrastructure中實現
不包含domain 邏輯
Repository?接口應獨立于數據庫/ ORM
為聚合根而非實體創建repositories
Application Services 原則
實現應用程序的用例(應用邏輯)
不實現核心domain邏輯
獲取并返回數據傳輸對象(DTO),而不是實體(entities)
在內部使用領域服務,實體,倉儲,和其他領域對象。
Application Services
通用DTO原則最佳實踐
應該序列化
應該有一個無參數的構造函數
不應該包含業務邏輯
不要從實體繼承!不要引用實體!
Input DTO 最佳實踐
僅定義用例所需的屬性
不要在多個用例(服務方法)中重復使用相同的輸入DTO。
例如:
ID 在創建的時候不會使用!創建和修改不要共享相同的dto!
密碼在更改和ChangeUserName不會使用!
另外兩個最佳實戰
僅實現形式驗證(可以使用數據注釋屬性)
不包括域驗證邏輯(例如:唯一用戶名約束)
Application Services
Output DTO 建議
保持輸出DTO文件數量最小。盡可能重復使用(不能把輸入DTO作為輸出DTO)。
可能包含比客戶需求更多的屬性
創建和更新方法返回實體DTO。
例外:性能至關重要的地方,尤其是對于大型結果集。
vs
Application Services 對象映射
使用自動對象映射庫(但是,請小心–啟用配置驗證)
不要將輸入DTO映射到實體。
將實體映射到輸出DTO
Multiple Application Layers 多個應用層
為每種應用程序類型創建單獨的應用程序層。
使用單個領域層 共享核心域邏輯。
總結
以上是生活随笔為你收集整理的跟着“土牛”学架构知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论ORM之EFCore初篇(快速基于本地
- 下一篇: Asp.Net Core 中Identi