Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
ドメイン駆動設計とは何か 【入門編】
Report
増田 亨
Follow
ソフトウェアシステムの設計・構築 at システム設計
Jan. 20, 2018
•
0 likes
5 likes
×
Be the first to like this
Show More
•
13,140 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
私がドメイン駆動設計をやる理由
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
実践に向けたドメイン駆動設計のエッセンス
増田 亨
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計入門
Takuya Kitamura
1
of
40
Top clipped slide
ドメイン駆動設計とは何か 【入門編】
Jan. 20, 2018
•
0 likes
5 likes
×
Be the first to like this
Show More
•
13,140 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Software
前半は、ドメイン駆動設計を特徴づける4つのポイントを、後半は、エヴァンス本の構成を俯瞰しながら、解説してみました。 gunma.web #30 での発表資料。
増田 亨
Follow
ソフトウェアシステムの設計・構築 at システム設計
Advertisement
Advertisement
Advertisement
Recommended
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
32.2K views
•
113 slides
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
49.7K views
•
45 slides
ドメイン駆動設計 基本を理解する
増田 亨
116.9K views
•
134 slides
リッチなドメインモデル 名前探し
増田 亨
14.1K views
•
29 slides
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
3.6K views
•
38 slides
正しいものを正しく作る塾-設計コース
増田 亨
9.4K views
•
9 slides
More Related Content
Slideshows for you
(20)
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
•
9.9K views
私がドメイン駆動設計をやる理由
増田 亨
•
22.7K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
•
47.5K views
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
•
7K views
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
•
8.6K views
実践に向けたドメイン駆動設計のエッセンス
増田 亨
•
26K views
ドメインオブジェクトの設計ガイドライン
増田 亨
•
3.5K views
ドメイン駆動設計入門
Takuya Kitamura
•
44K views
ソフトウェア開発のやり方の改善
増田 亨
•
6.5K views
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
•
15.4K views
アジャイルなソフトウェア設計を目指して
増田 亨
•
12.1K views
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
•
4.6K views
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
•
10.5K views
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
•
3K views
ドメイン駆動設計という設計スタイル
増田 亨
•
17.3K views
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
•
8.2K views
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
•
29.7K views
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
•
14.9K views
ドメイン駆動設計 複雑さに立ち向かう
増田 亨
•
5.8K views
ドメイン駆動設計入門
増田 亨
•
28.4K views
Similar to ドメイン駆動設計とは何か 【入門編】
(20)
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
•
137.5K views
20151110 ドメイン駆動設計によるサービス開発
Mao Ohnishi
•
11.3K views
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
•
3.6K views
社内 DDD 勉強会 #2
shingo suzuki
•
534 views
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Koichiro Matsuoka
•
585 views
Htmlコーディングの効率化 前編
Yasuhito Yabe
•
2.1K views
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
•
17.1K views
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
•
567 views
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
schoowebcampus
•
2.2K views
Webデザイナーのためのエディタ入門
Naoki Kanazawa
•
1.5K views
FiNC DDD第一回勉強会
裕紀 重村
•
12.2K views
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
•
233 views
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
Game Tools & Middleware Forum
•
3.7K views
ドメイン駆動設計の捉え方 20150718
Mao Ohnishi
•
5.5K views
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
Developers Summit
•
6.9K views
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
日本マイクロソフト株式会社
•
160 views
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
Atsuo AOKI
•
23.9K views
2022_sakura-yube_ddd.pdf
toshiki kawai
•
1.5K views
ドメイン駆動設計の正しい歩き方
増田 亨
•
25.1K views
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
貴志 上坂
•
11.4K views
Advertisement
More from 増田 亨
(18)
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
•
1.5K views
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
•
6.5K views
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
•
2.4K views
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
•
13.8K views
ソフトウェア設計の学び方を考える
増田 亨
•
25K views
マイクロサービス 4つの分割アプローチ
増田 亨
•
40.2K views
ビジネスルールの複雑さに立ち向かう
増田 亨
•
12.1K views
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
•
19.6K views
ドメイン駆動設計 本格入門
増田 亨
•
43.9K views
DDD sample code explained in Java
増田 亨
•
21.4K views
ドメイン駆動設計をゲーム開発に活かす
増田 亨
•
4.6K views
SoR 2.0 summary
増田 亨
•
1.3K views
毎日が越境だ!
増田 亨
•
10.5K views
SoR 2.0 基幹システムの再定義と再構築
増田 亨
•
9.1K views
越境する情シス:進化可能なアーキテクチャを手に入れる
増田 亨
•
5.8K views
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
•
3.9K views
現場で役立つシステム設計の原則
増田 亨
•
8.5K views
現場で役立つシステム設計の原則
増田 亨
•
6.2K views
Recently uploaded
(20)
Jitera Inc.Company presentation_v5.pdf
SoshiSuzuki2
•
138 views
①【伦敦政治经济学院毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
在哪里可以做《邦德大学文凭证书|毕业证》
kjds1245
•
2 views
留信网认证可查【俄克拉荷马大学文凭证书毕业证购买】
1lkjhg
•
2 views
①【布克大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
3 views
留信网认证可查【奥克兰大学文凭证书毕业证购买】
ihh14ds
•
2 views
div要素の中に、Flutterを埋め込んでみよう.pdf
ShunsukeAbe3
•
10 views
留信网认证可查【麻省大学洛威尔分校文凭证书毕业证购买】
hh123hh1
•
2 views
国外学历【麻省大学达特茅斯分校研究生文凭毕业证留学生首选】
534asdsa
•
3 views
☀️【萨德伯里大学毕业证成绩单留学生首选】
15sad
•
2 views
国外学历【奥克兰商学院研究生文凭毕业证留学生首选】
jsad789
•
2 views
国外学历【约克大学研究生文凭毕业证留学生首选】
1w53dacxz
•
2 views
留信网认证可查【马努卡理工学院文凭证书毕业证购买】
ihh14ds
•
2 views
測量データ処理システム「MarineDiscoveryクラウド」の紹介
ssuserbceee8
•
39 views
①【卡毕兰诺大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
留信网认证可查【怀俄明大学文凭证书毕业证购买】
1lkjhg
•
2 views
留信网认证可查【新学院文凭证书毕业证购买】
hh123hh1
•
2 views
①【密德萨斯大学毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
留信网认证可查【堪萨斯大学文凭证书毕业证购买】
1lkjhg
•
2 views
留信网认证可查【太平洋大学文凭证书毕业证购买】
hh123hh1
•
2 views
Advertisement
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】 DDD Alliance 増田
亨 Gunma.web #30 2017-1-20
自己紹介 コード例 :https://github.com/system-sekkei/isolating-the-domain ブログ:システム設計日記 http://masuda220.jugem.jp/ https://www.slideshare.net/masuda220/ コードを書くのが楽しくて、作ったソフトウェアを使ってもらえるとうれしい、どこにでもいる技術者 2
ドメイン駆動設計とは何か What is Domain-Driven
Design 3
お話しする内容 ドメイン駆動設計とは何か 考え方とやり方の特徴 エヴァンス本の概略 第1部 ドメインモデル 第2部 モデル駆動設計 第3部
深いモデル 第4部 大規模に適用する 4
ソフトウェア開発 の難しさ 複雑さ 不確定性 5
ドメイン駆動設計 ソフトウェア設計の 考え方とやり方 6 • ソフトウェア設計の、いろいろな考え方ややり方の集合体 • 構成する個々の要素に斬新なものはない •
強調する要素、その組み合わせ方に特徴がある
複雑なのは「ドメイン」そのもの ドメインの分析設計に焦点を合わせる 役に立つモデル、うまい実装は最初からは手に入らない インクリメンタルに設計する ドメイン駆動設計の考え方とやり方 7 複雑さをモデルで単純化し、モデルをもとづき実装する モデルと実装を一致させる 要点を見極め、関係者で共通理解にするための道具 会話とラフスケッチ
ドメインに焦点を合わせる ドメインの知識を獲得する ドメインの知識を整理する ドメインの知識をコードで表現する この活動に時間とエネルギーを使う 8
モデルと実装を一致させる 複雑さの核心はドメインそのもの ドメインの知識を広げる ドメインの重要な点を見極めて わかりやすく整理する(モデリング) 見極めた要点をコードで表現する 9
インクリメンタルに設計する ドメインの知識が足りない 要点がはっきりしない コードでうまく表現できない ドメインを学びながら設計を改善 要点を探究しながら設計を改善 コード表現を工夫しながら設計を改善 10
会話とラフスケッチ 人の「学習能力」の基本手段 他者との意識合わせの基本手段 声に出すことの効果 絵にすることの効果 要点の見極め、基本構造を発見する 費用対効果の高い手段 小さいころから、訓練を積んできた 誰もが持っているスキルを活用する 11
スタイルの比較 12 ドメインに焦点を合わせる 技術に焦点を合わせる 要点を見極める 一覧管理と網羅性の重視 モデルと実装を一致させる
モデルと実装を分離する インクリメンタルに設計する アップフロントに設計する 会話とラフスケッチ 成果物の定義と作成 コードで表現 ドキュメントで表現
開発者がドメインを学ぶ モデルと実装を一致させる 深いモデルを探求する ドメイン駆動設計 エヴァンス本の基本構成 巨大な複雑さに立ち向かう 13 第1部 第2部 第3部 第4部
第1部 ドメインモデルを機能させる 開発者がドメインを学び(1章) 関係者で要点を意見交換しながら 意識を合わせ(2章) 見極めた要点(モデル)を コードで表現する(3章) 14
第1部 要約 • 第1章
知識をかみ砕く – ドメインを継続的に学習する – ドメイン知識が豊富な設計 – ドメインを深く理解する • 第2章 コミュニケーションと言語 – 言葉による意見交換/意識合わせ – 声に出してモデリング – 略式のUML図による議論の基盤/手がかり • 第3章 モデルと実装を結びつける – モデルと実装を一致させる – そのための技法:オブジェクト指向 – モデリングと実装をシームレスな活動にする
モデルと実装を一致させる (3章)
モデル • 選び抜いた重要な側面 • 蒸留された本質的な知識 •
全体を形づくる主要な骨 組み 17
モデル • 選び抜いた重要な側面 • 蒸留された本質的な知識 •
全体を形づくる主要な骨 組み 実装 • 大量かつ網羅的な記述が • 重要ではないが、省略は できない細部の記述 • 肥大化したコード、重複し たコードとの戦い 18
モデル • 選び抜いた重要な側面 • 蒸留された本質的な知識 •
全体を形づくる主要な骨 組み 実装 • 大量かつ網羅的な記述が • 重要ではないが、省略は できない細部の記述 • 肥大化したコード、重複し たコードとの戦い モデルと実装を関連づけることで、実装が整理され、見通しが良くなる 実装からフィードバックすることで、モデルが実用的になる 19
モデルと実装を一致させる技法 オブジェクト指向 判断/加工/計算ロジックの整理整頓 手続きに名前をつける(メソッド) メソッドのグループに名前をつける(クラス) ユーザ定義の型をつくる(クラス) 同じメソッド名で異なる型に対応する(多重定義) 型の関係を構造化する(部分型) 異なる型に使えるロジックの一元化(型パラメータ) 20
モデルと実装を一致させる技法 ユーザ定義型 基本のデータ型、標準ライブラリは汎用目的 値の範囲が広すぎる 使えるメソッドが多すぎる ドメイン特化の独自の型を用意する/見つける 値の範囲を限定する できる操作を限定する ドメインの関心事とクラス名が一致する(一致させる) わかりやすい 変更の影響範囲が、ドメインの感覚と一致する 21
第2部 モデル駆動設計の構成要素 ドメインロジックの 置き場所を定める(4章) モデルの要素を オブジェクトで表現する基本パターン(5章) モデルと実装の一致を難しくする問題の 傾向と対策(6章) モデル駆動設計の具体例(7章) 22
ドメインロジックの置き場所を定める (4章)
プレゼンテーション層 データソース層 アプリケーション層 ドメインロジックの置き場所を独立させる @Controller @Service @Repository ドメインモデル ここを インクリメンタルに 成長させる ドメインオブジェクトの ライブラリ ドメインロジックを ここに集める 24
モデル要素を表現する基本パターン (5章)
モデル要素を表現する基本パターン • エンティティ – 「識別」という関心事の表現 –
現実世界では、関心事をどうやって識別しているか – それを、どうやって実装に反映するか • 値オブジェクト – 現実世界では、どんな値に関心があるか – その値に必要な判断/加工/計算のロジックは • サービス – 値(状態)を持たないロジックだけの表現 – エヴァンスは、実践的なテクニックの一つといってい るが …
モデル要素を表現する基本パターン (エヴァンス本にない内容) • コレクションオブジェクト – どんなコレクション(要素のグループ、一覧)に関心が あるか –
そのコレクションに対してでどんな判断/加工/計算 が必要か • 区分オブジェクト – 場合ごとのルールの違いはどうなっているか • 複雑さの核心になることが多い – どうやって表現するか • strategyパターン/stateパターン • Java enum型(サービス
モデルと実装の一致を難しくする問題 その傾向と対策 (6章)
モデルと実装の一致を難しくする問題 • オブジェクトの永続化 – 可能であれば、ドメインオブジェジェクトは、メモリ上に永遠に存在していてほしい –
それができない場合、どうするか? – 関心事と永続化の実装を分離する • Repository をインタフェースで宣言 • ドメインオブジェクトとテーブルのマッピングの外部化 • テーブル設計とオブジェクト設計の分離 • オブジェクトのネットワークの複雑化 – オブジェクトの参照関係の広がり/要点がぼやけてくる – どこかで断ち切る – 整合性とそれを維持するロジックに注目する( Aggregate 集約の設計) – 参照関係の復元は、サービス層で行う • (エヴァンス本には書いていないが) – 画面の複雑さがドメインオブジェクトの集約(Aggregate)に持ち込まれがち – Aggregteをデータのコンテナにしないことが基本 入門編としては、難易度が高いが、必ずぶつかる問題 … ここでモデル駆動設計がだいなしになっている場合が多い…
第3部 より深い洞察に向かうリファクタリング ブレークスルー(8章) 暗黙的な概念を明示的に(9章) しやなかな設計(10章) 分析パターンの適用(11章) デザインパターンを関係づける(12章) より深い洞察に向かうリファクタリング(13章) 30
ブレークスルー (体験から)
ブレークスルー • 要点が見つかった • 要点をうまくコードで表現できた (良い名前が見つかった) •
あちこちのコードがすっきりした • 修正が簡単だった(予測できた) – ロジックの追加や変更 – 区分の追加や変更
ブレークスルーの助走 • 違和感への気づき – 理解がずれている感 –
コードのごちゃごちゃ感 – 忘れないようにする • リファクタリングの基本の繰り返し – 長いメソッドからメソッドを抽出 – 大きなクラスからクラスを抽出 – その時の抽出単位と名前付け(暗黙から明示へ) – 値オブジェクト、コレクションオブジェクト、区分オブ ジェクトによる整理
ブレークスルーが起きやすい時 • 区分の構造のリファクタリング – 複数の分類軸が混在しているケースが多い –
区分構造が整理できると、区分オブジェクトにデータ やロジックを寄せやすくなる • 画面構造、テーブル構造の影響からの脱却 – ドメイン層のパッケージ構造 – クラス構造(特に Aggregate) – サービス層のメソッドの単位、引数、返す型 – リポジトリの単位、メソッドの引数、返す型
第4部 戦略的設計 境界づけられたコンテキストとコンテキス トマップ(14章) コアを蒸留する技法(15章) 大規模な構造(16章) 戦略をまとめあげる(17章) 35
第4部 戦略的設計 基本はいっしょ (時間がかかる) (範囲が広い) ドメインに焦点を合わせる モデルと実装を一致させる インクリメンタルに設計する 会話とラフスケッチ 36
おまけ 境界づけられたコンテキスト 異なるコンテキスト間のマッピング
文脈の違いの具体例 • ソフトウェア設計の考え方とやり方 • 意見交換、情報交換が難しい •
同じ言葉を使っていても、意図がうまく伝わら ない • プログラミングや設計は、開発者にとって、目 の前の生々しい課題 • 各自の言葉の使い方、とらえ方が一致しない
文脈の違い • ソフトウェアの対象分野(ドメイン) • 働き方(自社、受託/委任、フリーランス、…) •
技法とその経験/習熟度 – 分析技法 – 設計技法 – 開発プロセス • 利用技術 – 言語 • 型付けの違い、モジュール化の構文の違い – フレームワーク/ライブラリ – 実行環境
コンテキストのマッピング • 境界づけられたコンテキスト – それぞれの文脈(同じ言葉が同じ意味で通じる範 囲)を特定する •
異なるコンテキスト間のマッピングを試みる – 共同作業(目的、利害が一致する場合) …. この中間にいろいろなパターンがある – 別々の道(目的が異なり、利害も対立する場合)
Advertisement