domain-driven-hexagon:領域驅動六邊形的Javascript案例

banq發表於2022-04-16

學習領域驅動設計DDD、軟體架構、設計模式、最佳實踐的包含Javascript案例

該專案的主要重點是就如何設計領域驅動六邊形Domain-Driven Hexagon軟體應用程式提供建議。本自述檔案介紹了從不同來源收集的一些技術、工具、最佳實踐、架構模式和指南。

程式碼示例是使用NodeJSTypeScriptNestJS框架和Typeorm 編寫的,用於資料庫訪問。
雖然這裡介紹的模式和原則與框架/語言無關,但上述技術可以很容易地用任何替代方案替換。無論使用什麼語言或框架,任何應用程式都可以從下面描述的原則中受益。


領域驅動六邊形:

  • 領域驅動設計 (DDD)
  • 六邊形(埠和介面卡)架構
  • 安全設計
  • 清潔架構
  • 洋蔥架構
  • SOLID的原則
  • 軟體設計模式




在我們開始之前,以下是使用這樣一個完整架構的優點和缺點。

優點
  • 獨立於外部框架、技術、資料庫等。框架和外部資源可以用更少的精力插入/拔出。
  • 易測試和可擴充套件。
  • 更加安全。一些安全原則在設計本身中就已經包含了。
  • 該解決方案可以由不同的團隊進行工作和維護,而不需要踩到對方的腳趾。
  • 更容易增加新的功能。隨著系統的發展,增加新功能的難度保持不變,而且相對較小。
  • 如果解決方案沿著有邊界的上下文線被適當地分解,那麼在需要的時候,就很容易將其中的部分轉換為微服務

缺點
  • 這是一個複雜的架構,需要對高質量的軟體原則有堅定的理解,如SOLID、清潔/六角形架構、領域驅動設計等。任何實施這樣一個解決方案的團隊幾乎肯定需要一位專家來推動這個解決方案,並防止它以錯誤的方式發展和積累技術債務。
  •  
  • 這裡介紹的一些做法並不推薦給沒有很多業務邏輯的中小型應用。因此,實現這樣一個完整的架構通常不適合於簡單的CRUD應用,並可能使這種解決方案過度複雜化。下面描述的一些原則可以用於較小規模的應用,但必須在分析和了解所有的利弊之後才能實施。



domain-driven-hexagon:領域驅動六邊形的Javascript案例簡而言之,資料流看起來像這樣(從左到右)。

  • 請求/CLI命令/事件使用普通的DTO被髮送到控制器。
  • 控制器解析這個DTO,將其對映為命令/查詢物件格式,並將其傳遞給應用服務。
  • 應用服務處理這個命令/查詢;它使用域服務和/或實體執行業務邏輯,並通過埠使用基礎設施層。
  • 基礎設施層使用對映器將資料轉換為它所需要的格式,使用儲存庫來獲取/儲存資料,使用介面卡來傳送事件或進行其他I/O通訊,將資料對映回域格式並將其返回給應用服務。
  • 在應用服務完成其工作後,它將資料/確認返回給控制器。
  • 控制器將資料返回給使用者(如果應用程式有演示器/檢視,則返回這些資料)。

每一層都負責自己的邏輯,並且有構建模組,在可能和有意義的情況下,通常應該遵循單一責任原則(例如,只用Repositories來訪問資料庫,用Entities來處理業務邏輯,等等)。

請記住,不同的專案可以有比這裡描述的更多或更少的步驟/層/構建塊。如果應用需要,就增加一些,如果應用不是那麼複雜,不需要所有的抽象,就跳過一些。

對任何專案的一般建議是:分析應用有多大/多複雜,找到一個折中的辦法,根據專案的需要使用盡可能多的層/構件,跳過那些可能使事情過於複雜的層/構件。

每個步驟的更多細節點選標題

 

相關文章