purucat’s blog

寿司よ止まれっ!

"「実践ドメイン駆動設計」から学ぶDDDの実装入門" 10 章感想 (全14章)

"「実践ドメイン駆動設計」から学ぶDDDの実装入門"

「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)

「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)

のレビューをこまめに記載していく


「集約」〜トランザクション整合性を保つ境界〜

memo

  • 集約(Aggregates)とはオブジェクトのまとまりであり、即時に整合性を保ちながらデータを更新する単位。オブジェクトの集まりの「境界線」の意味で使われる。
    • 外部からは集約ルートとなるエンティティを介してのみ操作可能。(操作をしない外部からの参照だけなら、他の集約からの参照は許可。)
    • 5つルールと4つの例外がある
  • 楽観的並行性制御(optimistic concurrency control)データ取得時時点で一意に識別できる値と更新時点での値の差の有無で更新を制御 <-> pessimistic concurrency controlロックを取って並列更新を制御
  • 大きすぎる集約はトランザクションの衝突が多くなるため、小さな集約として切り出す。他の集約を参照するにはその集約ルートの一意な識別子のみを参照する。
  • Global Transaction (::= Distributed Transaction)の実現手法として2 phase commitがある。
  • デメテルの法則 (Law of Demeter, LoD) または最小知識の原則 (Principle of Least Knowledge)で保守性の向上。 ref. https://ameblo.jp/principia-ca/entry-11876117369.html
  • Tell-Don't-Ask (ref. https://martinfowler.com/bliki/TellDontAsk.html) Askしないことで、振る舞いが対象オブジェクトに移動するのを推奨する。
  • Disconnected Domain Model::= AggregatesからRepositoryを用いて他のAggregatesを読み出す。これよりは Domain Serviceで実現のほうが良い。

分からないこと

  • 次の2つのルールは、変更管理を容易にするための方針なのだろうか?