Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

#ooltjp 鈴木 勇 @moomooya ● 株式会社ラクス ● ガンプラ部部長(社内サークル) ● かつて勉強会レポート最速おじさんでした ● Javaの人でしたが、最近はJavaScript, Python, TypeScript ● 趣味でゲームデザイナー ○ 代表作は「5分で要件定義 Fat Project」

Slide 3

Slide 3 text

#ooltjp オブジェクト指向と 現代的なアーキテクチャ設計というと

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

#ooltjp でも

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

#ooltjp

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

#ooltjp アグリゲートパターンの要素 ● アグリゲート ○ 操作単位をまとめたもの ● アグリゲートルート ○ アグリゲートの窓口 ○ 外部からの操作を受け付ける ● 値オブジェクト ○ 業務知識の観点で説明的な型のオブジェクト ■ 「String型」ではなく「氏名型」であること

Slide 24

Slide 24 text

#ooltjp この時点では モノリシックなので ドメイン境界ミスってても取り 返しがつく(多分)

Slide 25

Slide 25 text

#ooltjp サービス分割

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

#ooltjp 元々サービス分割の手法 なのでそのまま分割 (多分)

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

#ooltjp 以上 Think ☺ you!!