Domain modelling made functional Chapter3を読む

raydive.hatenablog.jp

続き。

Chapter 3 A Functional Architecture

この章からドメインをソフトウェアアーキテクチャに変換していくところに入る。その前にソフトウェアアーキテクチャ自身もドメインだよねと、用語を定義するためにC4モデルを導入する。C4モデルの自分の理解としてはこんな感じ。

本の例だと、境界付けられたコンテキストとして今着目しているOrder-Taking ContextをDeployableなContainerとして話を進めている。*1境界付けられたコンテキスト間のやり取りにDTOやキューを導入したり、またコンテキスト間の決め事に三パターンあげている。

  • Shared Kernel
  • Customer/Supplier (Downstream contextが基準作って、upstreamがそれに乗っ取る)
  • Conformist (Upstream contextが提供しているものに、downstreamが合わせる)

このコンテキスト間の決め事はエリック・エヴァンスのドメイン駆動設計にも書かれてるが、この本のまとめが端的なので読みやすいかもしれない。外部システムとのやりとりには腐敗防止層もでてくる。ここまではよくあるDDDだが、52ページの"Avoid Domain Events within a Bounded Context"でFunctionalなデザインについて述べられる。さらにはオニオンアーキテクチャまで発展するのだが、この辺り伝統的なレイヤー化アーキテクチャとの比較になっているので、Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)とか読んでると納得度は高そうに思える。

raydive.hatenablog.jp

次の章からF#を使ったFunctionalなアプローチが始まるようなので、楽しみにしておこう。

ひとまずこの辺まで。

Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#

Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#

*1:前の章でマイクロサービスはちょっと……みたいな論調だったけど、ちょっとそれっぽい気もする。もっと筆者が想定しているよりも粒度が細かいのだろうか?