Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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!!