モノリスからマイクロサービスへ(1.4 必要十分なドメイン駆動設計)
目的
マイクロサービスに関する基礎知識の収集
背景
1.1 マイクロサービスとはを読んで、「ビジネスドメインに基づいてモデル化する」方法についてもっと詳しく知りたくなった
この章・節に期待すること
「ビジネスドメインに基づいてモデル化する方法」についての記載
この章・節を読む上で必要な知識
- 集約
- 例を挙げてくれているのでなんとなく理解できるが、前提知識として持っていた方が理解しやすいのかもしれない
ビジネスドメインに基づいてモデル化する方法
ドメイン駆動設計により「サービスの境界」を明確にすることで実現可能
ドメイン駆動設計について
集約
※この本に載っている情報だけでは、例を出さずに自分の言葉で説明することが出来なかった
1つのマイクロサービスが1つ以上の集約を持つ。
集約同士は関連付けができる。
実装方針
「状態」と「状態遷移を処理するコード」をひとまとめにした自己完結型のユニットとして実装する。
集約の状態を変更する場合、外部からの操作ではなく内部からの操作(集約が持っている状態遷移を処理するコード)で行う。
これにより不正な状態操作を防ぐことができる。
境界づけられたコンテキスト
集約よりも大きな単位。
境界づけられたコンテキストは1つ以上の集約を持っている。
集約と同様に、境界づけられたコンテキスト同士で関連付けができる。
実装方針
境界づけられたコンテキストが持つ集約はカプセル化し、公開する集約と隠蔽する集約を明確にする。
サービスの境界
集約と境界づけられたコンテキストはどちらもサービスの境界としてうまく機能するが、
まずは境界づけられたコンテキストをサービスの境界とするのが良い。
「マイクロサービス化を始めた段階では、サービスの数は少ない方が良い」というのが理由。
実際にマイクロサービスを運用する中でサービスをより小さく分割することになった場合に集約をサービスの境界とすることを検討してみる。
後から細分化することになったとしても境界づけられたコンテキストが集約をカプセル化(一部の集約以外を隠蔽)しているおかげで、
公開している集約自体に変更がないのであれば外部に対する影響は無い。
ドメイン駆動設計について詳しく知るには
「エリック・エヴァンスのドメイン駆動設計」を読むと良い。
感想
集約について
例のおかげでなんとか理解できた。 ただ、例を使わずに自分の言葉で説明しようと思ったけど無理だった。 集約を言葉でわかりやすく説明できるくらいに理解する為には別の本を読む必要があると思う。
サービスの境界の決め方について
読む前よりもかなりイメージできるようになった。 ただ、ドメイン駆動設計についてこの本で情報を得ようとするのはあまり得策では無いと感じた。
また、学習する順番としては ドメイン駆動設計 → マイクロサービス の方がよかったのではないかと思う。 ドメイン駆動設計を知らないままマイクロサービスを学習してもデータベースのモデリングについてイメージしにくい。
「必要十分」という表現について
読む前は「最小構成」とか「ミニマム」という意味かと思っていたが、
多分「ドメイン駆動設計についての最低限の解説」という意味なんだと思った。