リアクティブシステムとドメイン駆動設計の学習コンテンツ

これは、ドメイン駆動設計(DDD) Advent Calendar 2022 6日目の記事です。

2022年11月28日から12月2日の間のラスベガスでの AWS イベント、re:Invent のキーノートの冒頭で非同期の重要性が説明されました。

リアクティブシステムは、非同期とイベント駆動型の特徴を有しています。そして、リアクティブシステムから最大のパフォーマンスを得ようとすれば、需要の高いコンポーネントのスケーリングが必要になり、自ずと分散化へと進みます。またコンポーネントの最小の単位は関数になります。

そうはいっても、無節操に必要な関数を追加していくというアプローチはとれません。そこから構築される分散システムはデススターのような脆弱なシステムになるでしょう (Death Star Architecture)。

強靭で変化に強い分散システムの設計には「ドメイン駆動設計 (Domain-driven design)」がよく用いられます。

複数の関数をドメインエキスパートが理解できる単位にまとめます。「境界づけられたコンテキスト (Bounded Context)」という名でよく知られる、このコンテキストを「マイクロサービス」という単位でまとめることがよく実践されています。

ドメイン駆動設計の習得にはさまざまな方法がありますが、ここでは、無料で参照できるラーニングコンテンツをいくつか紹介します。

最初に Lightbend 社の e-Learning コースです。

かなりのボリュームがありますが、次のコースを受講することで、リアクティブシステムの基礎から CQRS やイベントソーシングまで学ぶことができます。また、デジタルバッジを獲得することもできます。

次は Microsoft 社のコンテンツです。ここでもドメイン駆動設計についての知識を得ることができます。

このコンテンツの中で「ドメインレイヤー」は次のように説明されています。

永続化非依存の原則とインフラストラクチャ非依存の原則に従って、このレイヤーではデータ永続化の詳細を完全に無視する必要があります。

これは関数を設計する視点で考えると、副作用のない純粋関数としてドメインレイヤーを設計することを意味しています。

これらを習得して、ドメイン駆動設計モデルを適用して、強靭で柔軟性のある分散システムの設計に役立てられます。