領域驅動設計與整潔架構基礎課程筆記之三

今天是領域驅動設計與整潔架構課程第三天的課程。

這次是實作,概念的部分比較少,因此今天的筆記就比較流水帳一點了。

定義雙向介面

UseCase interactor 指的就是實作 UseCase 的那個程式。

Clean Architecture 是先從 acceptance test 開始,然後再往下找 unit test。TDD 要注意如果一不小心跳過太多,會造成遇到錯誤的時候,很難找問題。

而能夠使用 TDD 的原因是,因為基本該分析的都做完了,所以其實很多材料都有了,因此做 TDD 並不會有什麼困難。完成所有 class 後,可以試著把所有物件放入 Clean Architecture 裡,看是不是符合。

Exception 的一種做法:Outter try Block

Event Handler 的取名的方法:「Notify 對象」,如 Notify board。

Policy 的閱讀法如下:when do for

Main Component 負責做 Dependency Injection,必須要知道所有的物件,這些都可透過適當的工具處理。

Aggregate 裡的 transaction 如下:

db commit
push event

這兩個行為非常難做 transaction,也因此 DDD 通常討論對應的解法就是使用 event sourcing。

另一個方法是 transaction outbox

https://ithelp.ithome.com.tw/articles/10236124

也因此,做這類系統很常會遇到 event 沒送,或是送兩次的問題。

最後,討論 Context Map 的 pattern。

  • Bounded Context
    • Ubiquitous Language
    • Context Map
      • 可以參考 https://ithelp.ithome.com.tw/articles/10218591
      • assess / overview relationships with 可以用這個評估與概觀所有關係
      • Shared Kernel v.s. Separate Way
        • Shared Kernel 共享資料
        • Separate Way 各走各的
      • Conformist v.s. Anti-corruption Layer
        • Conformist 指的是服從,上游來的資料,下游全部接受
        • Anti-corruption Layer 指的是做隔離層,不讓上游的東西影響下層
      • Open Host Service 公開給外部使用的服務
        • 必須使用 public language 來標準化介面
      • Customer / supplier teams
        • 簡單來說 supplier 死 customer 跟著死,反之不會。
        • 後來有人新增 Partnership ,是會一起死的,跟這個剛好是對應的關係。
    • Continuous Integration
      • keep model unified by 透過 CI 讓所有 model 一致

第三天就比較沒什麼特別的,因為我平常開發就有在透過業務邏輯分層,以及使用 Event 讓它們之間互相溝通(其實是學 Laravel Framework 的),只是差別在於是同步執行的,因此不會有 event 沒送或送兩次的問題。但因為架構非常雷同,因此主要就是學習如何把 EventStorming 的便利貼轉換成程式而已。

最後,感謝家人的支持,讓我能完成學習這個課程。

還有感謝 Teddy 三天的教學。