Closed8
ドメイン駆動設計とマイクロサービスとアーキテクチャとCQRSとイベントソーシングの勉強でサンプルプロジェクトを作ってみた
ピン留めされたアイテム

サンプルプロジェクト
元にした要件は、書籍「ドメイン駆動設計入門: ボトムアップでわかる!ドメイン駆動設計の基本」のサークル管理システム

ユースケース
- プロフィールの登録
- プロフィールの閲覧
- プロフィールの更新
- プロフィールの削除
- サークルの登録
- サークルの閲覧
- サークルの更新
- サークルの削除
- メンバーをサークルに追加
- メンバーをサークルから除外
- サークルオーナーの変更

アーキテクチャ
プロフィールとサークルの管理をそれぞれ別のバックエンドとして構成して、フロントエンドからバックエンドを呼び出す構成
バックエンド同士の連携は、クエリは HTTP、コマンドはイベント(Kafka)を使って実現

Profiles
オーソドックスなレイヤードアーキテクチャで構成
アプリケーションサービスを使ってシステムのユースケースを実現
リポジトリは永続化指向を意識していて、明示的に保存することが必要になる

Circles
ヘキサゴナルアーキテクチャやクリーンアーキテクチャ、CQRS、イベントソーシングを意識した構成
システムのユースケースはポートを使って実現
コマンドに当たるポートは Interactor として実装し、クエリに当たるポートはインフラ層のクエリサービスとして実装
リポジトリはコレクション指向を意識して、明示的に保存を要求しなくてもデータが更新されるように
これにはイベントソーシングを使って、イベント履歴から最新の集約を復元することで実現

サービス間の連携
プロフィールが削除された時、所属サークルから自動的に脱退するようにしている
これは、ProfileDeleted イベントが発行された時に Kafka にメッセージを発行、購読している Circles システムがメッセージを受診したら、所属サークルから該当のメンバーを除外するようにしている
このスクラップは2025/01/06にクローズされました