by shigemk2

当面は技術的なことしか書かない

ドメインイベントを設計する メモ #reactive_shinjuku

アジェンダ

  • メッセージの種類
  • ドメインイベントの設計

(DDD成分つよめ)

メッセージの種類

  • メッセージの種類
    • command message
      • point-to-pointで送る それ自体がactorの振る舞いを内包
    • document message
      • 情報を伝達
      • commandを送ってきたsenderへの返答(request-reply)
    • event message
      • ESの文脈
      • Pub/Subをつかう
      • 不特定多数へのブロードキャスト
      • commandが起点

DocumentとEventの違い

  • 内容とタイミング
  • Document 多少遅れても確実に届けたい
  • Event 不特定多数に、すぐに発行したい

ドメインイベントの設計

  • ドメインエキスパートがきにかける何かの出来事
  • DDD本には未収録
  • DDD Referenceには実装
  • 実装する手段としてEvent Message

ドメインイベントの見つけ方

  • 別の集約の状態に依存している集約を見つけるのが感嘆
  • するときに
  • そうなったら
  • 通知してほしい
  • 発生したときに

ポイント

  • 名前/プロパティはユビキタス言語に沿ったものにすること
  • 出来事が過去に発生したことがわかるようにする
  • 集約上で何らかのコマンドを実行した結果として発生するイベントの場合は、実行したコマンドに基づくイベント名にする
  • イミュータブルにしておく
  • 命令は過去形

設計の注意点

  • イミュータブルにしておく
    • 過去のイベントであるので
    • 発生要因の情報をもたせる
    • 追加の問い合わせはさける(処理コストと複雑さが増大するので)
    • 必要なものはイベントに含める
    • 必要最小限な情報だけを含める
    • entityレベルで含めると情報量が多すぎる

イベントを集約としてあつかう

  • 集約から発行される以外にも、ユーザのアクションによってクライアントから直接イベントを作られる設計
  • イベントを集約としてモデリング
  • モデルの構造の一部にできる

  • ドメインイベントは脇役ではなく第一級のオブジェクト

  • ミュータブルとイミュータブルをわけられる
  • ミュータブルな領域を狭めてモデルの複雑性を低減

永続化の注意点

  • データとして保存する

まとめ

  • messagingのひとつとしてのevent message
  • ドメインイベントとしてモデリングするだけでも有用

  • メッセージングのモデリングの有用なパターンが本に書いてある!

  • EIPにはエンタープライズ領域でのシステム構築に使えるヒントがいっぱい

  • RMPはActor Modelへの適応を実践している