Slide 1

Slide 1 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 風刺動画「一枚岩モデル」で考える DDDの境界付けられたコンテキスト G-1-2 2022年11月9日(水) AWS Dev Day 2022 Japan READYFOR株式会社 バックエンドエンジニア ミノ駆動

Slide 2

Slide 2 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. クソコード動画「一枚岩モデル」 https://twitter.com/MinoDriven/status/1590181987910029314 この動画の解説です

Slide 3

Slide 3 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. こんにちは、ミノ駆動です

Slide 4

Slide 4 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. ここで働いています

Slide 5

Slide 5 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 最近ニュースになったクラウドファンディング

Slide 6

Slide 6 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 自己紹介 NEC関連会社やキヤノン㈱、 ㈱クラウドワークスを経て、 2021年4月にREADYFOR㈱に ジョイン。 アプリケーションアーキテクトとして、 レガシーシステムのリファクタリングや 拡張性向上設計など、 システム設計に従事。 ミノ駆動 @MinoDriven

Slide 7

Slide 7 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 著作紹介 『良いコード/悪いコードで学ぶ設計入門』 技術的負債を作り込まない、 変更容易性の高い設計を学ぶ、 初級〜中級向け入門書。 新卒エンジニアに最適です。 輪読会も多数開催されております。 発売5ヶ月で7刷重版 発行部数2万部超え達成

Slide 8

Slide 8 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. そして なんと……

Slide 9

Slide 9 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 『良いコード/悪いコードで学ぶ設計入門』 繁体字(台湾)版 🎉翻訳出版 決定🎉 韓国語版

Slide 10

Slide 10 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. このセッションの概要 システムをスケールさせる手段のひとつとして マイクロサービス化があります。 マイクロサービス化においては、 システムの境界を慎重に設計しないと、 データ整合や運用が困難になります。 この課題解決にはドメイン駆動設計に登場する 境界付けられたコンテキストに基づく設計が有用とされています。

Slide 11

Slide 11 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. このセッションの理解目標 ● 一枚岩モデルに伴う弊害を認識し、 その解決手段として目的特化型モデルを設計する重要性を 理解すること。 ● 目的特化型モデルのために 境界付けられたコンテキストが存在することを理解すること。 ● 目的特化型モデルと境界付けられたコンテキストを 正しく設計できるよう、 DRY原則を正しく理解すること。

Slide 12

Slide 12 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 楽しい時間を過ごしたい スポーツ 観戦 ゲーム 旅行 問題領域 解決領域 問題領域に対し、それを解決するさまざまな 解決領域が世の中にはある

Slide 13

Slide 13 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 商品を売買したい コンビニ 移動 販売車 Amazon 商品売買にしても、コンビニや移動販売車といった物理店舗の他、 AmazonなどのECサイトも解決領域として存在する

Slide 14

Slide 14 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 在庫管理 配送 注文 商品審査 ECサイト 商品売買は、さらに「注文」「配送」といった 問題領域に分けて考えられる。

Slide 15

Slide 15 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 在庫管理 配送 注文 商品審査 ECサイト 商品モデル あらゆる問題に対応可能な、たったひとつの万能な 商品モデルはありえるのだろうか??

Slide 16

Slide 16 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 劇中の弊害① : 不変条件が異なる

Slide 17

Slide 17 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 劇中の弊害② : 言葉の解釈が異なる

Slide 18

Slide 18 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 統一的な一枚岩モデルにより生じる弊害 ● どの状況で何のデータが使われるのか分かりにくくなる ● どの状況でどんな振る舞いが期待されるのか分かりにくくなる ○ 状況によって守るべき不変条件が異なる ● 言葉やデータの意味が多義的になり、混乱をきたす ○ 混乱によりエンバグしやすい ○ データのフォーマットが状況によって違うケースもある ● 多くのあらゆるロジックと密結合になる ○ 保守や仕様変更時の影響範囲分析に莫大な労力を要する

Slide 19

Slide 19 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 統一的な一枚岩モデルにより生じる弊害 ひとことで言うと一貫性がない。 あらゆる状況に対応可能な、 万能な一枚岩モデルを作り上げることは困難。 「唯一無二の真のモデルなどは存在しません。 そこにあるのは単なる選択であり、 目的を満たすためのモデルを選択しなければなりません」(*1) *1)『セキュア・バイ・デザイン 安全なソフトウェア設計』著:Dan Bergh Johnsson, Daniel Deogun, Daniel Sawano, 訳:須田智 之, 2021, マイナビ出版, p.90

Slide 20

Slide 20 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 在庫管理 配送 注文 商品審査 ECサイト 商品 モデル 審査用に特化 商品 モデル 商品 モデル 商品 モデル 注文用に特化 配送用に特化 在庫管理用に 特化 従って各問題領域それぞれに対して専門で解決する、 目的特化型モデルを設計するのが良い

Slide 21

Slide 21 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 商品審査 商品審査コンテキスト 商品 モデル 注文 注文コンテキスト 商品 モデル 在庫管理 在庫管理コンテキスト 商品 モデル 配送 配送コンテキスト 商品 モデル 各特化型モデルは、それぞれ適用可能な範囲が異なる この範囲をシステム境界として定めたのが境界付けられたコンテキスト

Slide 22

Slide 22 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテキスト境界をどう設計するか?

Slide 23

Slide 23 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 境界付けられたコンテキスト (及び目的特化型モデル)は、 一見DDD独特の考え方のように思えるが……

Slide 24

Slide 24 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 境界付けられたコンテキストは、 DRY原則の延長線上にある

Slide 25

Slide 25 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. DRY原則 Don’t Repeat Yourself.(繰り返しを避けよ) 「すべての知識はシステム内において、単一、かつ明瞭な、 そして信頼できる表現になっていなければならない」(*2) 知識とは、わかりやすく言うと意図や目的を指す 意図や目的が同じであれば共通化して良いが、 違うなら共通化してはならないのがDRY原則 *2)『新装版 達人プログラマー 職人から名匠への道』著:Andrew Hunt, David Thomas, 訳:村上雅章, 2016, オーム社, p.31

Slide 26

Slide 26 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 不幸のはじまり 意図や目的を無視し「名前が同じだから」「ロジックが似ているから」と共通化す るのはDRY原則違反。 誤解されやすく、非常に陥りやすいポイント。

Slide 27

Slide 27 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. DRY原則の誤用 商品 モデル 商品 モデル 「名前が同じ」 「データやロジックも似ていそう」 「だからDRY原則に則って共通化しよう」 と考えるのは誤り

Slide 28

Slide 28 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 在庫目的 配送目的 意図、目的が同じかどうかで判断する 商品 モデル 商品 モデル 「目的が違っている!  共通化してはいけない!」 と考えるのが正しい DRY原則に従えば、目的ごとに特化型モデルを設計するのは自然なこと 各モデルの適用範囲として境界付けられたコンテキストを定めるのも自然なこと

Slide 29

Slide 29 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 商品審査 商品審査コンテキスト 審査品目 注文 注文コンテキスト 注文品 在庫管理 在庫管理コンテキスト 在庫品目 配送 配送コンテキスト 配送品 意図や目的は背後に隠れてて本当に分かりにくいし認知困難 だからはじめから目的駆動で名前設計する (詳しくは拙著『良いコード/悪いコードで学ぶ設計入門』)

Slide 30

Slide 30 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 在庫管理 入庫 出庫 在庫量 安定在庫量 在庫品目 配送 配送元 配送先 配送状況 配送料 梱包 観点1: 仕事のプロセス サイクルが閉じて いる 観点2: プロセスを取り巻く登場概念が 大幅に異なる 観点3: (大粒度で) 達成目的が 異なる

Slide 31

Slide 31 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 観点4:不変条件が異なる 例えば同じ商品モデルであっても…… 出品申請:申請時は必須項目が全て埋まっていること 審査:商品の項目編集は不可 予約:予約開始日など予約に関する項目が埋まっていること 状況によって不変条件が異なる

Slide 32

Slide 32 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. コンテキスト境界の設計観点 ● プロセスサイクルが異なる ● (大粒度で)達成目的が異なる ● 強く関係し合う概念が大幅に異なる ● モデルの不変条件が異なる ……など、大きな違いが見られるところを境界付けるよう 設計すれば良いと考えられる。 また、イベントストーミングやRDRAなどの各種分析手法も 大いに役立つ。

Slide 33

Slide 33 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. まとめ ● あらゆる状況に対応可能な、 万能な一枚岩モデルを作り上げるのは困難。 ● 各問題領域それぞれを専門で解決する、 目的特化型モデルを設計すること。 ● 各特化型モデルの適用可能範囲を、 ● 境界付けられたコンテキストとして設計すること。 ● コンテキスト境界と特化型モデルを設計する上では、 DRY原則を正しく理解すること。 モデルの背後にある意図、目的単位でDRYにすること。 ● コンテキスト境界は、 大粒度の目的、プロセス、不変条件、登場概念など、 様々な尺度で検討すること。