SlideShare 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

What's hot

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 

What's hot (20)

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 

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

ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
Masakazu Muraoka
 
パネルディスカッション資料(公開版)
パネルディスカッション資料(公開版)パネルディスカッション資料(公開版)
パネルディスカッション資料(公開版)
odakeiji
 
20110709 第1回jaz女子会 jaz紹介
20110709 第1回jaz女子会 jaz紹介20110709 第1回jaz女子会 jaz紹介
20110709 第1回jaz女子会 jaz紹介
Keiji Kamebuchi
 
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
Koichiro Nishijima
 
20121117 01 dir-mtgスライド01
20121117 01 dir-mtgスライド0120121117 01 dir-mtgスライド01
20121117 01 dir-mtgスライド01
Kenta Nakamura
 

Similar to DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 (20)

Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩
 
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
 
Devsumi2013 community
Devsumi2013 communityDevsumi2013 community
Devsumi2013 community
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
 
ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
 
TypeScript x Bot Framework
TypeScript x Bot FrameworkTypeScript x Bot Framework
TypeScript x Bot Framework
 
ドメイン駆動設計勉強会発表
ドメイン駆動設計勉強会発表ドメイン駆動設計勉強会発表
ドメイン駆動設計勉強会発表
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
connpass特徴と開発の流れ
connpass特徴と開発の流れconnpass特徴と開発の流れ
connpass特徴と開発の流れ
 
e-Learning Design for Teacher
e-Learning Design for Teachere-Learning Design for Teacher
e-Learning Design for Teacher
 
パネルディスカッション資料(公開版)
パネルディスカッション資料(公開版)パネルディスカッション資料(公開版)
パネルディスカッション資料(公開版)
 
20110709 第1回jaz女子会 jaz紹介
20110709 第1回jaz女子会 jaz紹介20110709 第1回jaz女子会 jaz紹介
20110709 第1回jaz女子会 jaz紹介
 
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
 
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
20121117 01 dir-mtgスライド01
20121117 01 dir-mtgスライド0120121117 01 dir-mtgスライド01
20121117 01 dir-mtgスライド01
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
Microsoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめMicrosoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめ
 
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
 

Recently uploaded

Recently uploaded (6)

Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 

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