イベントソーシングはツールに過ぎない、トップレベルのアーキテクチャスタイルではないので、場所を選ばず使用するべきではない — Dennis Doomen氏は、先頃アムステルダムで開催されたDDD Europe 2020カンファレンスのEvent Sourcing Dayに行った講演の中でこのように指摘し、イベントソーシングを問題に適用する場合に有用だと氏が考えるプラクティスを公開した。
Aviva Solutionsで継続的改善を担当するDoomen氏は、イベントソーシング使用の論理的結論のひとつは自分が関わるドメインを理解しなければならないということであり、これは自身にとって望ましいことだ、と述べている。氏の経験によると、あまりに多くのシステムが、ビジネス面の適切な理解のないまま構築されている。ビジネスがドメインを実際にどう考えているのかを捉えるために、氏が推奨する方法は、イベントソーシングと親和性の高いテクニックであるイベントストーミング(event storming)を使用することだ。
イベントソーシングの使用が適切であることを論証する一例として、Doomen氏は、起案(drafting)、ポリシ遂行(policy execution)、調査(search)という3つのサブドメインないしバウンダリを持った、法律文書処理アプリケーションを取り上げている。起案ドメインのポリシでは、文書設計と情報収集が行われるが、法律情報の処理は行わない。この場面は、従来型のCRUDベースのアーキテクチャでおそらく十分で、ドキュメントストアが使用される場合もある。ポリシ遂行ドメインでは、ポリシを実行した上で、署名やその他の法律上重要な情報を、その実行日時を含めて追跡しなければならない。機能上の競合が多いことや、追跡の必要な共同作業の存在が、このドメインにおいてイベントソースの使用が有益である可能性を示す合理的な理由になる。調査ドメインでは、Elasticsearchや、Apache Luceneに組み込まれたものなど、調査作業に最適化された手段を使用する必要がある。
ドメイン内で発生したイベントは、バウンダリや境界のあるコンテキストの外部へ公開するべきではない、とDoomen氏は強調する。氏自身の経験から、必ず問題が発生するからだ。外部に対しては、もっと高レベルな別のイベントを使用するべきだとして、氏は、Pat Helland氏が2005年に書いた論文"Data on the Outside versus Data on the Inside"を引用する。同時に氏は、イベントにはプリミティブな型のみを使用するように推奨している。こうすれば、古いイベントを読むことができなくなるリスクを最小化することができる。複雑な型のルールは、何年も経つうちに変化するかも知れないからだ。
イベントのバージョニングに関して、Doomen氏が多用しているのは、参照目的の集約情報のために転送する前に、イベントの名称の変更や分割、統合が可能なコンバータだ。このようなコンバータがあれば、マイグレーション中やその他の目的のために、オンザフライで実行することができる。その他のバージョニング戦略としては、イベントソースシステムにおけるデータ変換とデータスキーマの管理を取り上げたMarten Spoor氏の2つの論文などを紹介している。
いまだ間違ったことが行われている、とDoomen氏が考えるもののひとつがプロジェクションだ。プロジェクションには、自律性と独立性という、2つの重要な特性がある。プロジェクタはそれぞれが独自のサブスクリプションを持って、プロジェクションの必要なイベントを独立して追跡できなければならない。これは同時に、すべてのプロジェクションにおいて最も適したストレージ技術を使用することが可能になる、ということでもある。プロジェクションは複数の目的で再利用されるべきではない。将来的な変更でフィールドの追加が行わることによって、最終的に巨大で、メンテナンス不能なプロジェクションになる可能性があるからだ。個々のプロジェクションを合理的で最適化されたものにすることが重要であり、氏が常に心がけているプラクティスである。
プロジェクションの更新には、オブジェクト-リレーションマッピング(ORM)ツールよりも、SQLを直接使用することが多い。手っ取り早いし、プロジェクションではオブジェクト-リレーションのミスマッチは存在しないから、というのがその理由である。しかしDoomen氏は、ORMにもメリットがあると考えている。一般的に作業ユニットパターンが使用されるため、データベース操作の記述を最適化できるからだ。プロジェクションを自律的にすることで、プロジェクション毎に最も効果的なツールを選択する自由が得られる、と氏は述べている。
講演では、プロジェクションの拡張方法、システムの成長による大量のイベントに対するプロジェクションの実現方法、スナップショットを取得して古いイベントを削除する場合のツームストーニング(tombstoning)、さまざまなタイプのアップグレードなどについても論じられた。
カンファレンスのおもなプレゼンテーションは録画されており、今後数ヶ月内に公開される予定である。