SlideShare a Scribd company logo
1 of 63
Download to read offline
ドメイン駆動設計という
設計スタイル
ギルドワークス 増田 亨
2019.8.31
レガシーをぶっつぶせ! 現場でDDD #genbadeDDD
これから話すこと
2019/8/31 2
設計スタイルの選択
ドメインロジックに焦点をあわせる
開発現場での実験結果と考察
設計スタイルの選択
32019/8/31
設計スタイルの三つの側面
2019/8/31 4
関心の分離のアプローチ
モジュール構造の考え方
20:80のとらえ方
設計スタイルの三つの側面
2019/8/31 5
関心の分離のアプローチ
モジュール構造の考え方
20:80のとらえ方
何と何を分けるか? 何と何を一体にするか
ソースコードをどう分割し、どう組み立てるか
80%に大きな影響を及ぼす20%はどこか
設計スタイルの違い
2019/8/31 6
関心
モジュール構造
20:80
設計スタイルの違い
2019/8/31 7
関心
モジュール構造
20:80
入出力 ドメインロジック
設計スタイルの違い
2019/8/31 8
関心
モジュール構造
20:80
入出力 ドメインロジック
ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API
設計スタイルの違い
2019/8/31 9
関心
モジュール構造
20:80
入出力 ドメインロジック
ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API
トランザクションスクリプト ドメインオブジェクトモデル
設計スタイルの違い
2019/8/31 10
関心
モジュール構造
20:80
入出力 ドメインロジック
ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API
トランザクションスクリプト
画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型を定義
ドメインオブジェクトモデル
設計スタイルの違い
2019/8/31 11
関心
モジュール構造
20:80
入出力 ドメインロジック
ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web API
トランザクションスクリプト
ドメインロジックの設計と実装が
アプリケーション全体の構造を左右する
画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型でロジックを構造化
入出力の設計と実装が
アプリケーション全体の構造を左右する
ドメインオブジェクトモデル
ドメイン駆動設計の設計スタイル
2019/8/31 12
ビジネスルールに基づく計算と判断のロジック
に焦点を合わせる
ドメイン駆動設計の設計スタイル
2019/8/31 13
ビジネスルールに基づく計算と判断のロジック
に焦点を合わせる
ビジネスルールに登場する値の種類に注目して
独自の型を定義してロジックを整理する
ドメイン駆動設計の設計スタイル
2019/8/31 14
ビジネスルールに基づく計算と判断のロジック
に焦点を合わせる
ビジネスルールに登場する値の種類に注目して
独自の型を定義してロジックを整理する
ビジネスルールを記述する部分の設計と実装が
アプリケーション全体の構造と秩序を左右する
ドメインロジックに焦点を合わせる
2019/8/31 15
2019/8/31 16
ドメインロジックに
焦点を合わせる
ドメイン知識のコード表現
継続的な改善
ドメインの知識を
学び続ける
実践する
実践する
相互に補完する
ドメインロジック、ドメインの知識
2019/8/31 17
意味が広く、あいまい
もっと具体的に考える
ドメインロジック → ビジネスロジック
ドメイン知識 → ビジネスルール
2019/8/31 18
ビジネスの活動
ビジネスルール
ビジネスロジック
制約する/促進する
ビジネスルールに基づく計算ロジックや判断ロジック
ドメインの知識
ドメインロジック
2019/8/31 19
ビジネスロジック
ビジネスルールに基づく計算と判断のロジック
2019/8/31 20
ビジネスロジックに
焦点を合わせる
ビジネスルールの
コード表現の工夫と改善
ビジネスルールを
学び続ける
実践する
実践する
相互に補完する
ビジネスルール
2019/8/31 21
ビジネスの活動を制約し促進する決め事
物理法則のような論理的な体系ではない
過去の意思決定の積み重ね
現在のビジネスルール体系は通過点
これからもビジネスルールの追加や変更が続く
ビジネスルールを学び続ける
2019/8/31 22
ビジネスルールの知識を広げると、要求の意味が理解できる
ビジネスルールを深く理解すると、関係性や構造が見えてくる
詳細な仕様の補完力と提案力が増す
ビジネスとビジネスルールは時間とともに変化し続ける
現場で役立つビジネスルールの基礎知識
2019/8/31 23
ドメインエキスパートとか、ユビキタス言語とか言う前に
ドメイン層の全体構造を設計する時の指針
2019/8/31 24
文書化(構造化)された
ビジネスルール
顧客の利益 vs 自社の利益
折り合いのつけ方の決め事
競争戦略とビジネスルール ビジネスルールの階層構造
こういう基礎的な知識を学び理解すると、ドメイン層のパッケージ構造の設計の質が変わってくる
文書化(構造化)されたビジネスルール
説明
顧客に向けた取引条件や利用条件の説明
価格表、利用案内、割引、特典、返品・返金、キャンセル、…
契約書
提供の約束、支払いの約束
提供できなかった時の約束、支払いできなかった時の約束
業務マニュアル
販売ポリシー、在庫ポリシー、サービスレベルポリシー、…
役職・権限・承認ルール
簿記・予実管理
売上、費用、利益の目標と実績
管理単位(部門、期間、集計、…)
2019/5/11 25
文書化の範囲や精度は、組織によってまちまち
上場企業(とその子会社)と非上場企業の差は大きい
顧客の利益 vs 自社の利益
どこで折り合いをつけるかの決め事
Customer
Value
顧客価値 提供する商品、提供するサービス内容の決め事
Customer
Cost
顧客からみたコスト 価格、値引き、特典にからむビジネスルール
Convenience 顧客の利便性 提供方法、提供場所、提供タイミングのビジネスルール
Communication
顧客との
コミュニケーション
顧客とのコミュニケーションに関するビジネスルール
2019/5/11 26
ビジネスルールは、コストの制限、リスク回避の決め事であることが多い
ドメイン層のパッケージ分割の設計パターンのひとつ
競争戦略とビジネスルール
リーダー
強い競争力
大きな経営資源
他のプレーヤーの強みを消すためのビジネスルール変更が多くなる
(そういう意味では後追い型の変更)
チャレン
ジャー
独自優位性に挑戦
大きな経営資源
仮説検証型、企画型のビジネスルール変更が多くなる
新しい商品、新しい販売方法、新しい特典、…
フォロワー
弱い競争力
弱い経営資源
生き残りのための後追い型のビジネスルール変更が多くなる
資源がないので、ルール変更も場当たりや中途半端になりがち
ニッチャ
独自性が強く
経営資源は小さい
独自性を維持・強化することに集中する
ビジネスルールは独自かつ複雑になりがち
選択と集中の意思決定が明確
2019/5/11 27
その事業の競争戦略によって、パッケージの依存関係や中核となるパッケージが変わってくる
ビジネスルールの階層構造
ポリシー
事業運営の決め事
ビジネスルールの方針
価格、割引、優遇、拒絶
オーバーブッキング
キャンセル
約束
顧客との契約
取引先との契約
見積
予約
注文
運用
ビジネス活動の実体(イベント)
ビジネスルールの起動トリガー
出荷、売り上げ
請求、回収
能力 ビジネス運営上の制約条件
在庫
出荷能力
サービス提供能力
2019/5/11 28
エヴァンス本 責務のレイヤーにも登場する階層構造のパターン
ビジネスルールをコードで表現する
基本テクニック
2019/8/31 29
2019/8/31 30
ビジネスロジックに
焦点を合わせる
ビジネスルールの
コード表現の工夫と改善
ビジネスルールを
学び続ける
実践する
実践する
相互に補完する
2019/8/31 31
ビジネスルールとコード表現
Fact, Rule, Goalを表現する
独自の型を定義する
値の種類に注目する
ビジネスルールの構成要素
Fact 事実を表現する型
ビジネスの状況の記録や通知に使う型
・ 数値、日付、場所、識別番号、名称、…
Rule Factを使った
計算や判定のロジック
オブジェクトが持つべき演算能力
・算術演算
・同一性の判定
・大小の比較
Goal 知りたいことを表現する型
計算結果や判定結果を表現する型
・合計金額、予定日、残数、…
・出荷可否、受付可否、割引種類、…
2019/5/11 32
独自の型を定義する
2019/8/31 33
型は値の種類(金額、数量、日付、…)
型は値の範囲を制限する
型は可能な操作(演算)を制限する
型はプログラムに構造と秩序をもたらす
型の名前がコードの意図を豊かに表現する
現場で役立つ独自の型の設計パターン
2019/8/31 34
計算・判断ロジックのカプセル化
条件分岐を明示的に扱う
コレクション操作のカプセル化
値オブジェクト
計算・判断ロジックのカプセル化
単一の値 範囲(fromとto)
数値
金額型
Amount, Money
金額範囲
x円以上 y円未満
数量型
Quantity, NumberOfXxx
数量範囲
m人以上 n人以下
率型
Percentage, Permillage
率範囲
m%以上 n%未満
時間
日付型
DueDate, XxxDate
期間
開始日 - 終了日
時刻型
HourTime, XxxTime
時間
開始時刻 – 終了時刻
空間
地点型
Point
接続
Path:出発点 – 到達点
2019/5/11 35
計算の種類 説明、メソッド例 結果の型
等値判定 isEqual( other ) , notEqual( other ) boolean / enum
大小判定 greaterThan( other ), lessThan( other ), … boolean / enum
加算・減算 同じ型同士の計算 同じ型
乗算 同じ型同士の乗算は意味がないことが多い 別の数値型
除算 同じ型の除算と、異なる型の除算では、意味が異なる 別の数値型
境界 Max, Min の定義 同じ型(の固定値)
列挙の操作 previous(), next() が可能な集合 (循環が可/不可) 同じ型
文字列表現 値の標準的な文字列表現 toString() 文字列型
文字列からの生成 標準的な文字列表現からのオブジェクト生成 parse() 同じ型
単一値の計算・判定ロジック
2019/5/11 36
計算の種類 説明、メソッド例 結果の型
等値判定 isEqual( other ) , notEqual( other ) boolean / enum
大小判定 greaterThan( other ), lessThan( other ), … boolean / enum
範囲に含まれる contains( element ), encloses( other ) boolean / enum
範囲が重複する isOverlapped(other) boolean / enum
厳密に隣接する isConnectedTo(other) boolean / enum
境界の値 Max, Min 要素の型
範囲演算 intersect(other), minus(other), add(other) 範囲型
文字列表現 標準的な文字列表現 toString(), show(), describe() 文字列型
範囲型(from-to)の計算・判定ロジック
2019/5/11 37
値オブジェクト(独自の型)の効果
2019/8/31 38
➢独自の型はロジックを集約する
• 型名=ルール名
• 金額型=金額の計算ルール、金額の判断ルールの置き場所
• ロジックが一か所に集まる(コードの重複を防ぐ)
➢独自の型は可読性を向上する
• コードの曖昧性が減る → コードの意図が理解しやすい
• プリミティブな型は汎用。独自の型は用途限定。
• 整数演算をしたいのではなく、金額計算をしたい。
値オブジェクト(独自の型)の効果
2019/8/31 39
➢独自の型は信頼性を向上する (契約による設計)
• 引数の型 → 必ず有効な値を渡す約束
• メソッドが返す型 → 必ず有効な値を返す約束
• 冗長な検査ロジックが不要になる(例えば null チェック)
➢独自の型はコードの追跡を容易かつ確実にする
• 型を使っている個所 = そのビジネスルールに関係する個所
• 型による追跡性 vs 変数名による追跡性
• アプリケーション全体で、ビジネスの関心事との対応がとれたコードが増
える
条件分岐を型で表現する
2019/8/31 40
条件分岐との戦い
2019/8/31 41
顧客区分、商品種別、有効期間、地域区分、金額区分、数量区分、
取引種類、取引状態、支払い方法、支払いタイミング、
割り増し条件、割引条件、キャンセル可能条件、…
if文、boolean で表現された
暗黙的な区分
レガシーで
怪しげなコード体系
未使用と思われるコード
複数の分類軸の混在したコードマスター
通常の区分と超レアケースの混在 …
区分名が登場しない条件判断式
true/false に隠蔽された区分
区分の明示化とリファクタリング
2019/8/31 42
if文やboolean で
表現された暗黙の区分
レガシーで
怪しげなコード体系
区分の明示化とリファクタリング
2019/8/31 43
型を使った
列挙
たとえば Java enum
if文やboolean で
表現された暗黙の区分
レガシーで
怪しげなコード体系
区分の明示化とリファクタリング
2019/8/31 44
型を使った
列挙
enumに区分ごとの
計算・判定ロジックを寄せる
たとえば Java enum
コードがぎこちなくなったら
区分体系のリファクタリング
if文やboolean で
表現された暗黙の区分
レガシーで
怪しげなコード体系
区分の明示化とリファクタリング
2019/8/31 45
型を使った
列挙
区分体系のリファクタリング
enumに区分ごとの
計算・判定ロジックを寄せる
たとえば Java enum
区分名の変更
分類軸の分割
例外的区分の除去
区分が整理できたら、計算・判定ロジックを寄せる
コードがぎこちなくなったら
区分体系のリファクタリング
if文やboolean で
表現された暗黙の区分
レガシーで
怪しげなコード体系
区分の明示化とリファクタリング
2019/8/31 46
型を使った
列挙
区分体系のリファクタリング
enumに区分ごとの
計算・判定ロジックを寄せる
たとえば Java enum
区分名の変更
分類軸の分割
例外的区分の除去
区分が整理できたら、計算・判定ロジックを寄せる
コードがぎこちなくなったら
区分体系のリファクタリング
if文やboolean で
表現された暗黙の区分
レガシーで
怪しげなコード体系
改善を繰り返す
条件分岐を型安全にする効果
2019/8/31 47
➢列挙型(区分値)にロジックが集まる
➢列挙型(区分名)が可読性を向上する
➢列挙型による信頼性の向上(契約による設計)
➢列挙型はコードの追跡を容易かつ確実にする
ビジネスルールをコレクションで表現する
2019/8/31 48
ビジネスルールの記述にコレクションを使う
2019/8/31 49
Mapを使った料金ルールの早見表
Setを使ったスキルセットのマッチングロジック
Listを使った集計、最適要素の発見
ロジックを集約した型のコレクション
コレクションのコレクション
操作の種類 説明、メソッド例 結果の型
サイズ count() int
要素の検査 contains(要素), isEmpty(), notEmpty() boolean / enum
部分集合 select(条件), reject(条件), コレクション
集約演算 sum(), min(), max(), average(), … 集約結果の型
集合演算 insersect(other), minus(other), add(other) コレクション
変換 unique(), sort(), groupBy() コレクション
要素の取り出し first(), last(), at(index) 要素の型
要素の追加 add(), addAll(), append(), insertAt(), … void
文字列表現 show(), describe() 文字列, 文字列[ ]
コレクション操作のカプセル化
2019/5/11 50
コレクションをカプセル化する効果
2019/8/31 51
➢コレクションを内部に持った独自の型にコレク
ション操作ロジックが集まる
➢型名が可読性を向上する
➢型による信頼性の向上(契約による設計)
➢独自のコレクション型はコードの追跡を容易か
つ確実にする
ビジネスルールを独自の型で表現する
2019/8/31 52
独自の型を使う効果
2019/8/31 53
➢独自の型にビジネスロジックが集まる
➢型名が可読性を向上する
➢型による信頼性の向上(契約による設計)
➢型はコードの追跡を容易かつ確実にする
ビジネスルールを独自の型で表現する
役立つ技法の学び方
2019/8/31 54
エヴァンス本の拾い読みのススメ
2019/8/31 55
1章 継続的な学習、知識豊富な設計、深いモデル
2章 声に出してモデリングする、説明のためのモデル
9章 概念を掘り出す、それほど明示的でない概念をモデル化する方法
10章 閉じた操作、副作用のない関数、設計の宣言的スタイル
15章 コアドメイン、蒸留の拡大、強調されたコア、隔離されたコア
16章 責務のレイヤ
17章 大規模な構造と蒸留を組み合わせる
全体:クラス図にメソッド定義 or 制約の記述がある個所
ビジネスロジックに焦点を合わせ、独自の型を定義するための必読個所
ビジネスルールを型で表現した
サンプルコードが豊富
2019/8/31 56
開発現場での実験結果と考察
2019/8/31 57
ドメイン駆動設計の設計スタイル
2019/8/31 58
ビジネスルールに基づく計算と判断のロジック
に焦点を合わせる
ビジネスルールに登場する値の種類に注目して
独自の型を定義してロジックを整理する
ビジネスルールを記述する部分の設計と実装が
アプリケーション全体の構造と秩序を左右する
現場で確認できたこと
2019/8/31 59
コードを考えて書く人
コードを書かない人
現場で確認できたこと
2019/8/31 60
コードを考えて書く人
コードで具体的に話せるので、意図ややり方は確実に伝わる
サンプルコード、可視化ツール、ガイドラインもだいぶ整った
入出力に焦点をあわせる設計スタイルからの転換パターンは個人差
体にどのくらいしみついているか? どのくらい発想が柔軟か?
コードを書かない人
現場で確認できたこと
2019/8/31 61
コードを考えて書く人
コードで具体的に話せるので、意図ややり方は確実に伝わる
サンプルコード、可視化ツール、ガイドラインもだいぶ整った
入出力に焦点をあわせる設計スタイルからの転換パターンは個人差
体にどのくらいしみついているか? どのくらい発想が柔軟か?
コードを書かない人
ドメイン駆動設計の設計スタイルを言葉で伝えるのは無理
時間のむだかも
設計やその影響に関心を持っているの関係者の一部だけ
「ドメイン駆動設計」をユビキタス言語にしない
コードを書かない人の関心の文脈で、見せるようにする
可視化ツールは、そういう発想から生まれた
コードで確認できる発想の変化
独自の型の量と質
パッケージの構造、パッケージ名
入出力の記述個所への独自の型の浸透
2019/8/31 62
言葉と会話で確認できる発想の変化
タスク名、ToDo名、コミットログ
質問やアドバイスに登場する言葉
パッケージ名、クラス名、メソッド名の相談
ロジックの置き場所の相談
2019/8/31 63

More Related Content

What's hot

3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由増田 亨
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)A AOKI
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 

What's hot (20)

3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 

More from 増田 亨

事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して増田 亨
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary増田 亨
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!増田 亨
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築増田 亨
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる増田 亨
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル増田 亨
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 

More from 増田 亨 (20)

事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 

ドメイン駆動設計という設計スタイル