MSAにおけるサービスの分解とサブドメインパターン
1. MSAにおける分離/分解の意味
- 定義:「Business Capability(ビジネス能力)を持つ方向でサービスを定義すること」
- 方法:ビジネスの動作から問題領域(ドメイン)を導き出し、各領域で集中すべき部分をサブドメイン(Sub-Domain)として識別し、サービス化する
2. サブドメインを基準としたサービスの分解(DDDより)
ビジネスの動作をもとにサブドメインを定義し、それに基づいてサービスを分解する
例:注文サービス(顧客視点)
- 注文受付サービス:注文を「正確に」受け付けることに集中
- 注文決済サービス:受けた注文の決済を「適切に」処理することに集中
- 注文時の推薦サービス:注文プロセスの中で「適切な」方法で追加商品購入を促すことに集中
3. ドメイン駆動設計(DDD, Domain-Driven Design)
ドメインモデルの定義と役割
- ドメインモデル:ビジネス要件を満たすために、コア概念やルールを表現するオブジェクトの関係
-
ドメインモデルの例
- 「注文サービス」(顧客視点)
- 「配達サービス」(会社視点)
- 「飲食管理サービス」(飲食店視点)
ドメインモデリングの目的
単にドメインを識別するのではなく、ドメイン間のコア概念やルールを表現し、適切に分離できるようにすること
コア概念
- エンティティ(Entity):1つのオブジェクト、データのまとまり(例:注文、商品)
- アグリゲート(Aggregate):データ変更の単位として扱う関連エンティティのまとまり
- アグリゲートルート(Aggregate Root):アグリゲートの中で中心となるエンティティ
4. Bounded Contextとサブドメインパターン
Bounded Contextの基本原則
- 各ドメインは互いに排他的な問題を解決する必要がある
- Bounded Contextを明確に定義し、ドメイン間の境界を設定する
サブドメインパターンを活用したサービスの識別
- Bounded Contextを持つサブドメインを各サービスとして識別
- 各アグリゲートが独立したBounded Contextを持てるように分離
-
サービス分解:
サブドメインパターンを使用すると、各ドメインを独立したサービスとして分割して管理でき、これによりMSAでの柔軟性と拡張性を確保できます。