"「実践ドメイン駆動設計」から学ぶDDDの実装入門" 10 章感想 (全14章)
"「実践ドメイン駆動設計」から学ぶDDDの実装入門"
「実践ドメイン駆動設計」から学ぶDDDの実装入門 (CodeZine Digital First)
- 作者: 青木淳夫,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2019/05/31
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
「集約」〜トランザクション整合性を保つ境界〜
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.htmlTell-Don't-Ask
(ref. https://martinfowler.com/bliki/TellDontAsk.html) Askしないことで、振る舞いが対象オブジェクトに移動するのを推奨する。Disconnected Domain Model
::= AggregatesからRepositoryを用いて他のAggregatesを読み出す。これよりは Domain Serviceで実現のほうが良い。
分からないこと
- 次の2つのルールは、変更管理を容易にするための方針なのだろうか?
- 単一トランザクションでは単一の集約のみ更新すべき。 <= IDDD原著 http://www.informit.com/articles/article.aspx?p=2020371&seqNum=4 によると
If you are modifying multiple instances in a single transaction, it may be a strong indication that your consistency boundaries are wrong.
- 集約はルートエンティティ以外は値オブジェクトから構成するべき。
- 単一トランザクションでは単一の集約のみ更新すべき。 <= IDDD原著 http://www.informit.com/articles/article.aspx?p=2020371&seqNum=4 によると