Transcript
DDD モデリング勉強会第 9回2016/9/2 (金 )19:00 – 20:30
アジェンダ
• ドメインイベント、アグリゲーションルート、結果整合性• モデリングのお題• モデリング• 総括
ドメインイベント、アグリゲーションルート、結果整合性1トランザクションのシステムの例
受注から在庫確認、注文確定、在庫引当など、全部1トランザクションで整合性を保って処理
<Root>販売管理 在庫管理
同一トランザクションで処理する範囲
ドメインイベント、アグリゲーションルート、結果整合性システムが分散する例
• ドメインイベントでアグリゲーションルート間の連携をとる• 完全な一貫性を実現することは困難
<Root>販売管理<Root>在庫管理
別々のトランザクションで処理複数のアグリゲーションルート
ドメインイベント、アグリゲーションルート、結果整合性ドメインイベントとは• ドメインエキスパートが気に掛ける何かの出来事• ドメイン内で発生する何かの出来事
• 「・・・・するときに、」• 「もしそうなったら、・・・」• 「・・・の場合は、通知してほしい」• 「・・・が発生した場合、・・」• 「もし、こうなったら、・・・・」
ドメインイベント、アグリゲーションルート、結果整合性ドメインイベントの特徴• ドメイン全体にまたがる概念
• 単一の境界づけられたコンテキストで閉じない• 発生した出来事既に発生した出来事を表す(不変)(例)実行コマンド BacklogItem#commitTo(Sprint s)発生イベント BacklogItemCommittedコミットされた(成功した)ことを示している
ドメインイベント、アグリゲーションルート、結果整合性一貫性がなくても業務は成り立つ
• 販売管理側の在庫数は、いわゆるキャッシュ• それぞれの在庫数は常に一致しているわけではない
• 受注( 1 個) 販売管理: 29 個 在庫管理: 30個• 受注( 2 個) 販売管理: 27 個 在庫管理: 30個• 在庫引当( 3 個) 販売管理: 27 個 在庫管理: 27個• 在庫数更新 販売管理: 27 個 在庫管理: 27個
<Root>販売管理 <Root>在庫管理在庫数: 30個 在庫数: 30個
モデリングのお題ハンバーガーの注文を管理するシステム• 全店舗、倉庫を一括管理するアーキテクチャ
モデリングのお題
モデリングのお題
モデリングのお題チェーンの成長にともない問題発生!
店舗、倉庫が増加
注文、在庫の引き当てが大量に発生
レコードのロックにより、一定数以上の注文を受け付けられなくなった
モデリングのお題課題ドメインイベント、結果整合性を使って、問題が解決可能となるようにドメインモデルを修正してください業務要件、制限•商品の製造中に材料の在庫切れ等が発生した場合は、製造途中の商品は廃棄してよいこととします•物流にかかる時間、コストは 0とし、発注をまとめる必要はありません
総括
top related