實現(xiàn)領域驅動設計 - 使用ABP框架 - 什么是領域驅動設計?
前言:
最近看到ABP官網的一本電子書,感覺寫的很好,翻譯出來,一起學習下
(Implementing Domain Driven Design) https://abp.io/books
DDD簡介
領域驅動設計(DDD)是一種通過將實現(xiàn)連接到演進的模型來實現(xiàn)復雜需求的軟件開發(fā)方法
相對于簡單的CRUD應用,DDD更適合于復雜的領域和大規(guī)模的應用。它關注核心域邏輯,而不是基礎結構細節(jié)。
它有助于構建靈活、模塊化和可維護的代碼庫。
DDD的實現(xiàn)高度依賴于面向對象編程(Object Oriented Programming, OOP)和SOLID原則。實際上,它實現(xiàn)并擴展了這些原則。因此,在真正實現(xiàn)DDD時,對OOP和SOLID的良好理解會對您有很大幫助
DDD分層和整潔架構
基于領域驅動的解決方案有四個基本層
業(yè)務邏輯分為兩個層,領域層和應用層,而它們包含不同種類的業(yè)務邏輯

- 領域層: 實現(xiàn)領域/系統(tǒng)的核心、用例獨立的業(yè)務邏輯
- 應用層: 基于領域實現(xiàn)應用的用例。用例可以被認為是用戶界面(UI)上的用戶交互。
- 表示層: 包含應用程序的UI元素(頁面、組件)
- 基礎設施層: 通過實現(xiàn)對第三方庫和系統(tǒng)的抽象和集成來支持其他層
核心構建塊
DDD主要關注領域和應用層,而忽略了表示和基礎結構。它們被視為細節(jié),業(yè)務層不應該依賴于它們
這并不意味著表示層和基礎結構層不重要。它們非常重要。UI框架和數據庫提供程序有它們自己的規(guī)則和最佳實踐,您需要了解并應用它們。然而,這些都不在DDD的主題之內
領域層構建塊
- 實體: 實體是一個具有自己屬性(狀態(tài)、數據)和方法的對象,這些屬性實現(xiàn)了在這些屬性上執(zhí)行的業(yè)務邏輯。實體由其唯一標識符(Id)表示。兩個id不同的實體對象視為不同的實體
- 值對象: 值對象是另一種類型的域對象,通過其屬性而不是唯一的Id來標識。這意味著具有相同屬性的兩個值對象被認為是同一個對象。值對象通常被實現(xiàn)為不可變的,并且通常比實體要簡單得多。
- 聚合和聚合根: 聚合是由聚合根對象綁定在一起的對象集群(實體和值對象)。聚合根是具有一些附加職責的實體的特定類型
- 存儲庫(接口): 存儲庫是一個類似集合的接口,域層和應用層使用它來訪問數據持久性系統(tǒng)(數據庫)。它對業(yè)務代碼隱藏了DBMS的復雜性。域層包含存儲庫的接口
- 領域服務: 領域服務是一種無狀態(tài)服務,它實現(xiàn)領域的核心業(yè)務規(guī)則。實現(xiàn)依賴于多個聚合(實體)類型或一些外部服務的域邏輯是有用的。
- 規(guī)范: 規(guī)范用于為實體和其他業(yè)務對象定義命名的、可重用的和可組合的過濾器
- 領域事件: 領域事件是在發(fā)生特定于域的事件時,以松散耦合的方式通知其他服務的一種方式
應用層構建塊
- 應用程序服務: 應用程序服務是一種無狀態(tài)服務,它實現(xiàn)應用程序的用例。應用程序服務通常獲取和返回dto。它由表示層使用。它使用并協(xié)調領域對象來實現(xiàn)用例。用例通常被認為是一個工作單元
- 數據傳輸對象(DTO): DTO是一個簡單的對象,沒有任何業(yè)務邏輯,用于在應用程序層和表示層之間傳輸數據。
- 工作單元(UOW): 工作單元是作為事務單元執(zhí)行的原子工作。UOW中的所有操作都應該在成功時提交,失敗時回滾

浙公網安備 33010602011771號