狠狠撸

狠狠撸Share a Scribd company logo
2020.3.15
松岡 幸一郎 (@little_hand_s)
1
DDDオンライン勉強会
集約?境界付けられたコンテキスト
自己紹介
● 松岡 幸一郎 (@little_hand_s)
● DDD community jp主催
● DDD周りの話をするブログ書いてます
● WEB+DB PRESS 2019年10月号 特集「体験ドメイン駆動設計」執筆
2
本日の趣旨
3
● 「ドメイン駆動設計 モデリング/実装ガイド」
技術書典8向けに執筆
● 発売記念として、本書の一部内容+αを
オンライン講義形式で解説します
● オンラインで既存のオフライン勉強会をどの程度代替できるか、
の検証としての試み
オンライン勉強会というチャレンジ
オフライン勉強会
● 前に立って発表
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
● 登壇後の個別質問
4
オンライン勉強会
●
●
●
●
● オンラインで既存のオフライン勉強会をどの程度代替できるか、
の検証としての試み
オンライン勉強会というチャレンジ
オフライン勉強会
● 前に立って発表
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
● 登壇後の個別質問
5
オンライン勉強会
● YouTube Liveによる配信
●
●
●
● オンラインで既存のオフライン勉強会をどの程度代替できるか、
の検証としての試み
オンライン勉強会というチャレンジ
オフライン勉強会
● 前に立って発表
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
● 登壇後の個別質問
6
オンライン勉強会
● YouTube Liveによる配信
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
●
● オンラインで既存のオフライン勉強会をどの程度代替できるか、
の検証としての試み
オンライン勉強会というチャレンジ
オフライン勉強会
● 前に立って発表
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
● 登壇後の個別質問
7
オンライン勉強会
● YouTube Liveによる配信
● Twitterのハッシュタグツイート
● Sli.doによる質疑応答
● YouTube Liveのチャットによる質問
やりとり
スポンサー様
● 今回もスポンサー様についていただき、
オンライン配信のご相談もさせていただきました。
8
スポンサー様
● 今回もスポンサー様についていただき、
オンライン配信のご相談もさせていただきました。
9
スポンサー様
● 今回もスポンサー様についていただき、
オンライン配信のご相談もさせていただきました。
10
スポンサー様
● 今回もスポンサー様についていただき、
オンライン配信のご相談もさせていただきました。
11
スポンサー様
● マイクをお渡しします
12
それでは
● 本編始まります
13
質問受け付けます
● sli.doで質問受け付けます
○ https://app.sli.do/event/8wxkcvu8 にアクセス
○ 質問を追加 or 既存の質問に投票
14
質問受け付けます
● sli.doで質問受け付けます
○ https://app.sli.do/event/8wxkcvu8 にアクセス
○ 質問を追加 or 既存の質問に投票
● ツイートは通常のイベントのようにお願いします
○ Twitterハッシュタグは #ddd_online
○ YouTube Live上のコメントもOK
15
本日の趣旨
16
● 「ドメイン駆動設計 モデリング/実装ガイド」
技術書典8向けに執筆
● 発売記念として、本書の一部内容+αを
オンライン講義形式で解説します
他の章の紹介
17
←前回の範囲
←今回の範囲
「集約」
18
● DDDは様々な手法を組み合わせている
● 「オブジェクト指向」「モデリングしてから実装」
というのはDDD固有のものではなく、個別で取り組んでいる人も多い
DDD固有の設計手法
19
● DDDは様々な手法を組み合わせている
● 「オブジェクト指向」「モデリングしてから実装」
というのはDDD固有のものではなく、個別で取り組んでいる人も多い
● ただ、他ではあまり聞かないDDD固有の設計手法がある
DDD固有の設計手法
20
DDD固有の設計手法
● DDDは様々な手法を組み合わせている
● 「オブジェクト指向」「モデリングしてから実装」
というのはDDD固有のものではなく、個別で取り組んでいる人も多い
● ただ、他ではあまり聞かないDDD固有の設計手法がある
○ 集約
○ 境界づけられたコンテキスト
21
集約
● 集約とは
「必ず守りたい強い整合性を持ったオブジェクトのまとまり」
● 概念的な定義より、ルールから入った方がわかりやすい
22
集約のルール
● 強い整合性確保が必要なものを1 つの集約にする
● 必ず1つのトランザクションでまとめて更新する
○ リポジトリから、集約単位で取得
○ 集約単位で更新
○ = 部分取得、部分更新はしない
23
強い整合性確保が必要なものを1 つの集約にする
● 「高校の部活動」の例
● 以下のドメインモデル図
24
テーブル設計を考えると???
● 「部ー生徒テーブル」のような中間テーブルが作られる
● よくある実装は、テーブルごとにDAO(DataAccessObject)が作られる
25
部員の登録
26
部の承認
27
ある日
28
「先生、部員が1人しかいないのに
承認状態の部があります!!」
29
えっ
30
犯人探しに奔走する先生たち
31
そして犯人を見つけた
32
先生こいつです
33
先生こいつです
34
部の承認状態を変えずに
部員を減らせてしまう
悪いメソッド
35
部の承認状態を変えずに
部員を減らせてしまう
悪さがわかりづらい
● 「部」のステータスと、「部ー生徒テーブル」の数に
ルール/制約があった 
テーブル設計を考えると???
36
そこで
37
● 「必ず守りたい強い制約」をもつオブジェクトたちを一つの「まとまり」
にして管理する
● その単位が「集約」
テーブル設計を考えると???
38
● リポジトリからは集約単位で取得して、集約単位で永続化するようにする
39
ここからはライブコーディングで
40
集約については以上です
41
「境界づけられたコンテキスト」
とは
42
ECサイトで商品を販売するシステム
● エンジニアと販売部は同じ「商品」というモデルを共有
43
配送部も登場し異なる概念の「商品」があることが判明
44
強引に概念を統一
45
さらに経理部の概念も統合
46
● システムが大規模になると、
関係者すべてで統一したモデルを作ることは難しくなる
47
● システムが大規模になると、
関係者すべてで統一したモデルを作ることは難しくなる
● そこで、DDD ではモデルが適用される範囲を明示的に定義し、
それぞれの中でモデル、言語の統一を目指す
48
● システムが大規模になると、
関係者すべてで統一したモデルを作ることは難しくなる
● そこで、DDD ではモデルが適用される範囲を明示的に定義し、
それぞれの中でモデル、言語の統一を目指す
● これが「境界づけられたコンテキスト」
49
それぞれのコンテキストのモデル
50
● これが境界づけられたコンテキストの概念
● 実装についてはまた別の機会に
51
他の章の紹介
52
他の章にも興味を持っていただけた方は
53
「ドメイン駆動設計 モデリング/実装ガイド」
boothにて販売中
質問箱で質問募集しています
● 質問いただければ回答します
● https://peing.net/ja/little_hands
● 「質問箱 little_hands」で検索
54
ご静聴ありがとうございました
55
sli.do回答タイム
56
ご静聴ありがとうございました
57

More Related Content

DDDオンライン勉強会#2 「集約?境界付けられたコンテキスト」