新規サービスをマイクロサービスで構築するのはアンチパターンと言われていますが、サービスが大きくなった時のことを考えるとサービス分割しやすい設計が求められます。 モノリシックな仕組みの中でサービス分割しやすい設計とするためにアグリゲートパターンを紹介します。
2020.7.6スライド修正:「集約についてDDD本に記載がない」という部分が誤りだったので訂正しています。
#ooltjp©2020 RAKUS Co., Ltd.モノリスにおけるビジネスロジックの設計~アグリゲートパターン~2020.6.26Isamu Suzuki
View Slide
#ooltjp鈴木 勇 @moomooya● 株式会社ラクス● ガンプラ部部長(社内サークル)● かつて勉強会レポート最速おじさんでした● Javaの人でしたが、最近はJavaScript, Python, TypeScript● 趣味でゲームデザイナー○ 代表作は「5分で要件定義 Fat Project」
#ooltjpオブジェクト指向と現代的なアーキテクチャ設計というと
#ooltjpマイクロサービスアーキテクチャは切っても切れない関係
#ooltjpでも
#ooltjp新規サービスをマイクロサービスで作るのはアンチパターン
#ooltjp立ち上げ時に必要な開発速度が上がらない
#ooltjpでも大きくなってしまうとサービス分割が難しい
#ooltjpどうしたらいいの!?
#ooltjpDDD(オブジェクト指向原理主義)の中に答えはあった
#ooltjpアグリゲート(集約)パターン
#ooltjp
#ooltjpアグリゲート(集約)は原典では記載されていない実践(Implementing)を経て生まれたパターン嘘でした。DDD本第6章にもガッツリ解説されていました。
#ooltjpアグリゲート(集約)とは?
#ooltjpドメインモデルをまとめたもの
#ooltjpドメインモデルをまとめたものわからん
#ooltjpドメインの操作単位をまとめたもの
#ooltjp店舗情報アグリゲート顧客アグリゲート注文アグリゲート注文配達先支払情報注文商品配達先支払情報顧客店舗情報「とあるレストランのドメインモデル」(第 5章参照)
#ooltjp注文アグリゲート店舗情報アグリゲート顧客アグリゲート注文配達先支払情報注文商品配達先支払情報顧客店舗情報「とあるレストランのドメインモデル」(第 5章参照)・ルートとなるドメインが操作を受付・アグリゲート内の整合性を担保する
#ooltjp店舗情報アグリゲート顧客アグリゲート注文アグリゲート注文配達先支払情報注文商品配達先支払情報顧客店舗情報「とあるレストランのドメインモデル」(第 5章参照)正規化されていない ↓ アグリゲート単位で整合性を保つため
#ooltjp店舗情報アグリゲート顧客アグリゲート注文アグリゲート<アグリゲートルート>注文 配達先支払情報注文商品配達先支払情報<アグリゲートルート>顧客<アグリゲートルート>店舗情報アグリゲートルート値オブジェクトアグリゲート
#ooltjpアグリゲートパターンの要素● アグリゲート○ 操作単位をまとめたもの● アグリゲートルート○ アグリゲートの窓口○ 外部からの操作を受け付ける● 値オブジェクト○ 業務知識の観点で説明的な型のオブジェクト■ 「String型」ではなく「氏名型」であること
#ooltjpこの時点ではモノリシックなのでドメイン境界ミスってても取り返しがつく(多分)
#ooltjpサービス分割
#ooltjp店舗情報サービス顧客サービス注文サービス<アグリゲートルート>注文 配達先支払情報注文商品配達先支払情報<アグリゲートルート>顧客<アグリゲートルート>店舗情報アグリゲートルート値オブジェクトサービス
#ooltjp元々サービス分割の手法なのでそのまま分割(多分)
#ooltjpサービス間のトランザクションはSagaパターンなどで対応「サーガによるトランザクションの管理」(第 4章参照)
#ooltjpきっとハッピーになれるはず
#ooltjp以上Think ☺ you!!