メッセージングベースのシステムを考えるとき、将来へのメッセージ送信を遅延させるのはとても強力なパターンだ。このパターンは時間に関する問題に対処するにはとても便利だ。ロンドンで開催されたDDD ExchangeカンファレンスでGreg Young氏はそう語った。
氏はCQRSという言葉を作り、この主の問題の例を示した。つまり、将来のスケーリングをどうするかという問題だ。一般的な解決策はドメインモデル上へクエリを実行し、集約モデルを更新するバッチジョブだが、ドメインの専門家はこのようなジョブについては語らない。これはスケジューリングに関わることであり、現時点のスケジューリングによって将来に発生する物事に関わることだ。
このような問題をモデリングする方法として、氏がよく言及するのがメッセージを発行し、そのメッセージが将来のある時点で配信されるようにする方法だ。これを実現する一般的な方法はメッセージにオブジェクトの状態を書き込み、システムにある将来の時点、一般的にはタイムアウト時にそのメッセージを送信するよう設定する。この方法によって、時間の問題はなくなる。メッセージがいつ到着したか、ではなく、どの順で到着したか、が焦点になるからだ。
ドメインモデリングの観点からは、全く違うモデルが生まれる。ドメインの専門家とは将来の振る舞いやスケジューリングの振る舞いを話す。バッチやクエリの話はしない。ドメインの専門家にとってもそれが自然だ。一般的な集約モデルとイベントベースも出るの重要な違いは、集約モデルの場合、クエリを使って状態を解決する必要がある。クエリを使わないと状態が正しくなくなる。イベントモデルでは状態は常に正しい。
Greg氏は時間がドメインの概念になる場合には多くの問題が生まれ、イベントベースのモデリングは、集約やフラットなステートモデルよりも時間に関する問題にフィットする、という。ドメインの時間的な側面を未来への遅延メッセージというかたちで明示的にモデリングできるからだ。すべての問題を解決するわけではないが、このソリューションが最適な状況がある、というのが氏の考えだ。
来年のDDD Exchangeは2015年6月19日に予定されている。