モノリスにおけるビジネスロジックの設計 ~アグリゲートパターン~ / aggregate-pattern-for-domain-modeling-on-monolithic

モノリスにおけるビジネスロジックの設計 ~アグリゲートパターン~ / aggregate-pattern-for-domain-modeling-on-monolithic

新規サービスをマイクロサービスで構築するのはアンチパターンと言われていますが、サービスが大きくなった時のことを考えるとサービス分割しやすい設計が求められます。
モノリシックな仕組みの中でサービス分割しやすい設計とするためにアグリゲートパターンを紹介します。

2020.7.6スライド修正:「集約についてDDD本に記載がない」という部分が誤りだったので訂正しています。

0aa238a274c2397214b20d6eed58939b?s=128

moomoo-ya

June 26, 2020
Tweet

Transcript

  1. #ooltjp ©2020 RAKUS Co., Ltd. モノリスにおける ビジネスロジックの設計 ~アグリゲートパターン~ 2020.6.26 Isamu

    Suzuki
  2. #ooltjp 鈴木 勇 @moomooya • 株式会社ラクス • ガンプラ部部長(社内サークル) • かつて勉強会レポート最速おじさんでした

    • Javaの人でしたが、最近はJavaScript, Python, TypeScript • 趣味でゲームデザイナー ◦ 代表作は「5分で要件定義 Fat Project」
  3. #ooltjp オブジェクト指向と 現代的なアーキテクチャ設計というと

  4. #ooltjp マイクロサービスアーキテクチャ は 切っても切れない関係

  5. #ooltjp でも

  6. #ooltjp 新規サービスを マイクロサービスで作るのは アンチパターン

  7. #ooltjp 立ち上げ時に必要な 開発速度が上がらない

  8. #ooltjp でも大きくなってしまうと サービス分割が難しい

  9. #ooltjp どうしたらいいの!?

  10. #ooltjp DDD(オブジェクト指向原理主義) の中に答えはあった

  11. #ooltjp アグリゲート(集約)パターン

  12. #ooltjp

  13. #ooltjp アグリゲート(集約)は 原典では記載されていない 実践(Implementing)を経て 生まれたパターン 嘘でした。 DDD本第6章にも ガッツリ解説されて いました。

  14. #ooltjp アグリゲート(集約)とは?

  15. #ooltjp ドメインモデルをまとめたもの

  16. #ooltjp ドメインモデルをまとめたもの わからん

  17. #ooltjp ドメインの操作単位を まとめたもの

  18. #ooltjp ドメインの操作単位を まとめたもの

  19. #ooltjp 店舗情報アグリゲート 顧客アグリゲート 注文アグリゲート 注文 配達先 支払情報 注文商品 配達先 支払情報

    顧客 店舗情報 「とあるレストランのドメインモデル」(第 5章参照)
  20. #ooltjp 注文アグリゲート 店舗情報アグリゲート 顧客アグリゲート 注文 配達先 支払情報 注文商品 配達先 支払情報

    顧客 店舗情報 「とあるレストランのドメインモデル」(第 5章参照) ・ルートとなるドメインが操作を受付 ・アグリゲート内の整合性を担保する
  21. #ooltjp 店舗情報アグリゲート 顧客アグリゲート 注文アグリゲート 注文 配達先 支払情報 注文商品 配達先 支払情報

    顧客 店舗情報 「とあるレストランのドメインモデル」(第 5章参照) 正規化されていない   ↓
 アグリゲート単位で整合性を保つため
  22. #ooltjp 店舗情報アグリゲート 顧客アグリゲート 注文アグリゲート <アグリゲートルート> 注文 配達先 支払情報 注文商品 配達先

    支払情報 <アグリゲートルート> 顧客 <アグリゲートルート> 店舗情報 アグリゲートルート 値オブジェクト アグリゲート
  23. #ooltjp アグリゲートパターンの要素 • アグリゲート ◦ 操作単位をまとめたもの • アグリゲートルート ◦ アグリゲートの窓口

    ◦ 外部からの操作を受け付ける • 値オブジェクト ◦ 業務知識の観点で説明的な型のオブジェクト ▪ 「String型」ではなく「氏名型」であること
  24. #ooltjp この時点では モノリシックなので ドメイン境界ミスってても取り 返しがつく(多分)

  25. #ooltjp サービス分割

  26. #ooltjp 店舗情報アグリゲート 顧客アグリゲート 注文アグリゲート <アグリゲートルート> 注文 配達先 支払情報 注文商品 配達先

    支払情報 <アグリゲートルート> 顧客 <アグリゲートルート> 店舗情報 アグリゲートルート 値オブジェクト アグリゲート
  27. #ooltjp 店舗情報サービス 顧客サービス 注文サービス <アグリゲートルート> 注文 配達先 支払情報 注文商品 配達先

    支払情報 <アグリゲートルート> 顧客 <アグリゲートルート> 店舗情報 アグリゲートルート 値オブジェクト サービス
  28. #ooltjp 元々サービス分割の手法 なのでそのまま分割 (多分)

  29. #ooltjp サービス間のトランザク ションはSagaパターンなど で対応 「サーガによるトランザクションの管理」(第 4章参照)

  30. #ooltjp きっとハッピーになれるはず

  31. #ooltjp 以上 Think ☺ you!!