Vol1:マイクロサービスの概要->https://qiita.com/get-latest-information/items/e959d12a54a378ffceb2
Vol2: DDD(ドメイン駆動設計)を用いたマイクロソフトサービス設計アプローチ -> https://qiita.com/get-latest-information/items/5da2088e952c2562347f
Vol3: 戦術的DDDを使用したマイクロサービスの設計
##今回のフォーカス
MicrosoftのAzure Docsで色々な機能やアーキテクチャなどがまとまっているので、
今回は、マイクロサービス関連で下記ページをサマリーします。なるべく短い言葉を使って。
◆戦術的DDDを使用したマイクロサービスの設計
https://docs.microsoft.com/ja-jp/azure/architecture/microservices/model/tactical-ddd
##戦術的パターンの概要
- 戦術的DDDパターンは、ドメインモデルをより正確に定義する。1つのコンテキスト内で適用される。
- 戦術的DDDパターンの概要図
- エンティティ:ユニーク(一意)なIDをもつオブジェクト。変わる可能性はある。ex)顧客、銀行口座
- 値(Value)オブジェクト:変更を管理する必要がないオブジェクト。ex)色、日付、時刻
- 集約:一貫性の境界を定義。
- 簡単にいうと、マイクロサービスA、B、Cがあって、一貫性が必要である場合、データ整合性をアプリケーション側で保つようにすること。(記事の中では、トランザクションのインバリアント(不変)をモデル化すること。)
- モノリシックの場合は、データレイヤーで一貫性・整合性を保っている。- ドメインサービスとアプリケーションサービス:サービスは、データを保持せず、ロジック実装するオブジェクト。
- ドメインサービス:ドメインロジックをカプセル化するもの
- アプリケーションサービス:技術的な機能(ユーザ認証、SMSメッセージ送信etc)
- ドメインイベント:ドメイン内で発生したイベントを外部へ通知すること。
- ドメインサービスとアプリケーションサービス:サービスは、データを保持せず、ロジック実装するオブジェクト。
##ドローン配送:パターンの適用
- ドローン配送シナリオでは、以下のエンティティが考えられる。
- 配送
- 荷物(Package)
- ドローン
- Account
- 確認
- 通知(Notification)
- タグ
- 集約は、4つ→配送、荷物、ドローン、アカウント
- 確認と通知は、配送の子エンティティ
- タグは、荷物の子エンティティ
- 値オブジェクト:Location,ETA(Estimated Time of Arrival),荷物の重さ,荷物のサイズ
- ドメインイベント:
- ドローンが飛行中に、場所や状態(飛行中、着陸)を示すDroneStatusイベントを送る。ドローンエンティティが送る。
- 配送エンティティが配送段階が変わる度に、DeliveryTrackingイベントを送る。
##感想
似た用語が多くて、パッとわかりづらい。ドメインモデル、ドメインロジックなど。
やっぱり一度、簡単でいいので体験してみるべきと感じた。