SlideShare a Scribd company logo
ドメイン駆動設計
サンプルコードの徹底解説
2019年4月4日
github.com/system-sekkei/
isolating-the-domain
Spring Boot, Spring MVC, MyBatis, Thymeleaf, Semantic-UI
なぜ作ったか?
©有限会社 システム設計 32019/3/22
なぜ作ったか?
実アプリケーション並みの具体例がほしかった
コードがいちばん具体的に伝えることができる
質問が具体的になり、考え方の違いがはっきりする
2019/4/4 4©有限会社 システム設計
何の具体例か?
©有限会社 システム設計 52019/3/22
2019/3/22 ©有限会社 システム設計 6
ソフトウエアの核心にある複雑さに立ち向かう
ドメイン駆動設計とは
2019/3/22 ©有限会社 システム設計 7
関心の分離の工夫
モジュール構造の工夫
ソフトウェアの核心にある複雑さに立ち向かう
©有限会社 システム設計 82019/3/22
複雑さに立ち向かう
三つのキーワード
©有限会社 システム設計 92019/3/22
2019/3/22 ©有限会社 システム設計 10
ドメインロジック 複雑さの根源
ドメインモデル 複雑さをモデルで整理
オブジェクト指向 モデルと実装の一致
3つのキーワードの要点を絞り込む
©有限会社 システム設計 112019/3/22
2019/3/22 ©有限会社 システム設計 12
ドメインロジック → ビジネスルール
ドメインモデル → 計算モデル
オブジェクト指向 → 型指向のプログラミング
何の具体例か?
ビジネスルールが複雑さの原因
計算のモデリング
型指向でプログラミングする
2019/4/4 13©有限会社 システム設計
関心の分離の工夫
この2つを徹底的に分ける
同じモジュール(ソースファイル)に
計算と入出力は、いっしょに書かない
2019/4/4 14©有限会社 システム設計
計算(ビジネスルール)を実行するモジュール群
データを入出力するモジュール群
モジュール構造の工夫
手続き的な入出力モジュールに計算を埋め込む
(トランザクションスクリプト)
計算を型(値の種類)でモジュール化して組み合わせる
(ドメインモデル → 計算モデル)
2019/4/4 15©有限会社 システム設計
サンプルアプリケーションの概要
時給ベースの給与計算アプリケーション
背景にあるビジネスルール
雇用契約(時給単価, …)
労働基準法(深夜, 休日, 総労働時間, …)
計算に必要な事実
勤務実績(いつ、何時間)
給与計算ルールを62種類の型で記述
本日は、給与(Payroll)型を中心に説明
2019/4/4 16©有限会社 システム設計
給与(Payroll)型を中心にレイヤごとに説明
①ドメイン層(ビジネスルール層)
②アプリケーション層
③データソース層とデータベース
④プレゼンテーション層
2019/4/4 17
④プレゼンテーション層
②アプリケーション層
③データソース層
③データベース
①ビジネスルール層
©有限会社 システム設計
設計も基本的にこういう順番でやっている
各ステップの説明ごとにQ&Aを入れます
ドメイン層(ビジネスルール層)
2019/4/4 ©有限会社 システム設計 18
プレゼンテーション層
アプリケーション層
データソース層
データベース
ビジネスルール層
ビジネスルールを記述する3要素
Fact 事実の表現
ビジネスの状況の記録や通知に使う値の種類
・ 数値、日付、場所、識別番号、名称、…
Rule Factを使った
計算や判定のロジック
計算式
同一性の判定式
大小の比較式
Goal 知りたいこと
計算結果や判定結果を表現する値の種類
・合計金額、予定日、残数、…
・出荷可否、受付可否、割引種類、…
2019/3/22 ©有限会社 システム設計 19
3要素の具体例
計算結果:Goal
給与の一覧画面 2月 支払い額
計算の元データ: Fact
→勤務時間の一覧画面(勤務の履歴)
→従業員の一覧→布川光義→時給の履歴画面
計算ロジック(Rule)を記述したモジュール群を集約したクラス
domain.model.payroll.Payroll型
計算結果を表現するクラス
Payroll#totalPayment() : PaymentAmount型
2019/4/4 20©有限会社 システム設計
Payrollクラス
事実への参照
Contract型 (契約条件:時給単価、割り増しルール、…)
Attendance型 (勤務実績) → TimeRecords型 (毎日の記録のコレクション)
計算の実行:totalAmount()
結果の表現:PaymentAmount型
2019/4/4 ©有限会社 システム設計 21
ドメイン層の設計の考え方とやり方
計算モデルが息づく場所
model パッケージ 計算モデルの表現
type パッケージ モデルを表現するための基本部品のライブラリ
型指向のプログラミング
→ wiki : github.com/masuda220/business-logic-patterns/wiki/設計ガイドライン
→ スライド : 「ドメイン駆動設計本格入門」
→ 書籍:「現場で役立つシステム設計の原則」
Plain Old Java
Bean Validation → 有効な値の表明 → 自己文書化の一部
可読性 over Javaの習慣的な記法 (finalやprivateの省略)
No getter, no setter, no Lombok, no JPA
2019/4/4 ©有限会社 システム設計 22
modelに置くか、typeに置くかは書いてみながら判断・調整
時給ベースの給与計算モデル
2019/4/4 ©有限会社 システム設計 23
attendance.Attendance 勤怠
attendance.AttendanceStatus 勤怠状況
attendance.Recorded 勤務記録有無
attendance.TimeRecords 勤務実績一覧
attendance.TotalWorkTime 総勤務時間
attendance.WorkMonth 勤務月
contract.Contract 従業員契約
contract.Contracts 従業員契約一覧
contract.ContractStartingDate 契約開始日
contract.ContractStatus 契約状態
contract.ContractWage 契約給与
contract.ContractWages 契約給与一覧
contract.HourlyWage 時給
contract.MidnightHourlyExtraWage 深夜時給割増額
contract.OverTimeHourlyExtraWage 深夜時給割増額
contract.WageCondition 給与条件
employee.ContractingEmployees 契約中従業員一覧
employee.Employee 従業員
employee.EmployeeNumber 従業員番号
employee.MailAddress メールアドレス
employee.Name 氏名
employee.PhoneNumber 電話番号
legislation.DailyOvertimeWork 時間外労働
legislation.ExtraPayRate 割増率(%)
legislation.Midnight 深夜
legislation.MidnightExtraRate 深夜割増率
legislation.OverTimeExtraRate 時間外割増率
payroll.PaymentAmount 支払い金額
payroll.PaymentWorkTime 支払い対象時間
payroll.Payroll 給与
payroll.Payrolls 給与一覧
payroll.PayrollStatus 給与ステータス
timerecord.ActualWorkTime 勤務時間実績
timerecord.bindingtime.BindingTime 拘束時間
timerecord.bindingtime.DaytimeBindingTime 日中拘束時間
timerecord.bindingtime.MidnightBindingTime 深夜拘束時間
timerecord.breaktime.BreakTime 休憩時間合計
timerecord.breaktime.DaytimeBreakTime 日中休憩時間
timerecord.breaktime.MidnightBreakTime 休憩時間(深夜)
timerecord.DaytimeWorkTime 日中勤務時間
timerecord.EndTime 勤務終了時刻
timerecord.MidnightWorkTime 深夜勤務時間
timerecord.OverWorkTime 時間外勤務時間
timerecord.StartTime 勤務開始時刻
timerecord.TimeRange 勤務の開始と終了
timerecord.TimeRecord 勤務実績
timerecord.WorkDate 勤務日付
timerecord.WorkTime 勤務時間
amount.Amount 金額
amount.Percentage 率(割増や税などの金額に掛けられるもの)
amount.RoundingMode 端数処理
date.Date 日付
date.DayOfWeek 曜日
date.Month 月
date.Year 年
date.YearMonth 年月
time.ClockTime 時刻を時分単位で表す
time.ClockTimeRange 開始時刻と終了時刻を表現する(時刻間の時間間隔を返
time.Hour 時間(数)
time.HourAndMinute x時間y分
time.Minute 分(数)
time.QuarterHour 15分単位の時間
time.QuarterRoundClockTime 15分単位の時刻
time.QuarterRoundClockTimeRange 15分単位の時刻
給与計算に関するFact-Rule-Goalを表現したクラス群=ビジネスルール用語集
(ソースから自動生成)
2019/4/4 ©有限会社 システム設計 24
60種類の独自の型を
9つのパッケージで整理
パッケージ構造が
ビジネスルールの概要説明になっている
(ソースコードから自動生成したパッケージ図)
2019/4/4 ©有限会社 システム設計 25
区分ごとのロジックの整理
区分に依存するロジックの視覚化
(ソースコードから自動生成した区分の関連図)
ソフトウェアの複雑さの大きな原因である、
区分ごとのロジックをenumで整理
enumを参照するクラスを特定し、
区分構造の影響範囲を可視化
2019/4/4 ©有限会社 システム設計 26
Q&A : ドメイン層の設計とコード例
2019/4/4 ©有限会社 システム設計 27
アプリケーション層
2019/4/4 ©有限会社 システム設計 28
プレゼンテーション層
アプリケーション層
データソース層
データベース
ビジネスルール層
使う
ビジネスルールの記述を独立させる
プレゼンテーション層の
モジュール群
アプリケーション層の
モジュール群
データソース層の
モジュール群
ビジネスルールを
記述したモジュール群
利用する
2019/3/22 ©有限会社 システム設計 29
アプリケーション層の複雑さ
ビジネスルールの記述を、ビジネスロジック層に移動する
理論的にはアプリケーション層はとてもシンプルになる
現実はアプリケーション層に複雑な記述が残りやすい
アプリケーションの要素分解と組み立て
2019/3/22 ©有限会社 システム設計 30
アプリケーションの要素分解
2019/4/4 ©有限会社 システム設計 31
Factory サービス
計算モデルのインスタンスを生成する
→ データソース層で事実を元に生成
Query サービス 計算結果を返す → プレゼンテーション層へ
Operation サービス 計算結果を記録/通知する → データソース層へ
アプリケーションの組み立て
2019/4/4 ©有限会社 システム設計 32
複合serviceクラス @Service
複数の単機能サービスを組み合わせた
サービス
要素serviceをautowireする
例:
PayrollQueryCordinatorクラス
要素servicクラス @Service
単機能のサービス
repositoryをautowireする
例:
ContractQueryServiceクラス
AttendanceQueryServiceクラス
使う
Q&A : アプリケーション層の設計とコード例
2019/4/4 ©有限会社 システム設計 33
データソース層とデータベース
2019/4/4 ©有限会社 システム設計 34
プレゼンテーション層
アプリケーション層
データソース層
データベース
ビジネスルール層
計算モデルとデータモデルの
マッピング
データソース層設計の考え方とやり方
データの入出力の実装
MyBatis SQL Mapper
SELECTの実行→計算用のオブジェクトの生成
記録すべき事実を持ったオブジェクト→INSERTの実行
ContractDataSourceクラス
TimeRecordDatasourceクラス
2019/4/4 35©有限会社 システム設計
データベース設計の考え方とやり方
プログラムからは独立したデータの記録と参照の仕組み
イミュータブルなデータモデル:事実の履歴+最新状態
事実の履歴 → INSERT オンリー
最新状態の導出結果 → DELETE/INSERT
NO UPDATE
NO updated_at カラム
制約指向
データ型
NOT NULL制約、外部キー制約、ユニーク制約
とことん日本語
スキーマ名、テーブル名、カラム名 実験だったけど、なかなか良い感じ(説明ドキュメント)
2019/4/4 36
https://www.slideshare.net/kawasima/ss-40471672
https://www.slideshare.net/kawasima/ss-44958468
川島さんのスライド
©有限会社 システム設計
Q&A
データソース層とデータベースの設計とコード例
2019/4/4 ©有限会社 システム設計 37
プレゼンテーション層
2019/4/4 ©有限会社 システム設計 38
プレゼンテーション層
アプリケーション層
データソース層
データベース
ビジネスルール層
計算モデルとビューのマッピング
計算モデルのビュー
ドメインオブジェクトをそのまま表示 (naked object パターン指向)
Spring MVC
Direct Field Access → WebDataBinder#initDirectFieldAccess()
Thymeleaf
Semantic UI → Fomantic UI
PayrollControllerクラス
templates/payroll/list.html
2019/4/4 39©有限会社 システム設計
Q&A : プレゼンテーション層の設計とコード例
2019/4/4 ©有限会社 システム設計 40
なぜ作ったか?
実アプリケーション並みの具体例がほしかった
コードがいちばん具体的に伝えることができる
質問が具体的になり、考え方の違いがはっきりする
2019/4/4 41©有限会社 システム設計

More Related Content

What's hot

3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
増田 亨
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 

What's hot (20)

3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 

Similar to ドメイン駆動設計サンプルコードの徹底解説

MiiTel.pdf
MiiTel.pdfMiiTel.pdf
MiiTel.pdf
ShinnosukeSegawa
 
[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight
Amazon Web Services Japan
 
Ibm bluemix handson the weather company api
Ibm bluemix handson the weather company apiIbm bluemix handson the weather company api
Ibm bluemix handson the weather company api
Masaya Fujita
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
Amazon Web Services Japan
 
20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces
Amazon Web Services Japan
 
Kintone hands on
Kintone hands onKintone hands on
Kintone hands on
twilioforkwc
 
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
Amazon Web Services Japan
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
Hirokazu Nishi
 
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
満徳 関
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
apkiban
 
Midworks
MidworksMidworks
Midworks
ssuser163445
 
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
Amazon Web Services Japan
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
史識 川原
 
負荷分散勉強会
負荷分散勉強会負荷分散勉強会
負荷分散勉強会
Yuji Otani
 
プロレス クラウドExpo 20140515(公開版)
プロレス クラウドExpo 20140515(公開版)プロレス クラウドExpo 20140515(公開版)
プロレス クラウドExpo 20140515(公開版)
Daisuke Kawada
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Software Japan
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Atsushi Nakamura
 
クラウド型グループウェアの選び方 3つのポイント
クラウド型グループウェアの選び方 3つのポイントクラウド型グループウェアの選び方 3つのポイント
クラウド型グループウェアの選び方 3つのポイント
Cybozucommunity
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
DIVE INTO CODE Corp.
 
20121009 cybozu.com kintone資料
20121009 cybozu.com kintone資料20121009 cybozu.com kintone資料
20121009 cybozu.com kintone資料
Cybozucommunity
 

Similar to ドメイン駆動設計サンプルコードの徹底解説 (20)

MiiTel.pdf
MiiTel.pdfMiiTel.pdf
MiiTel.pdf
 
[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight
 
Ibm bluemix handson the weather company api
Ibm bluemix handson the weather company apiIbm bluemix handson the weather company api
Ibm bluemix handson the weather company api
 
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpacesAWS Black Belt Online Seminar 2018 Amazon WorkSpaces
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
 
20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces20180207 AWS blackbelt online seminar Amazon Workspaces
20180207 AWS blackbelt online seminar Amazon Workspaces
 
Kintone hands on
Kintone hands onKintone hands on
Kintone hands on
 
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
[CTO Night & Day 2019] CTO のためのセキュリティ for Seed ~ Mid Stage #ctonight
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
 
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
Microsoft Azure上にwebサイトやアプリケーションを構築する方法 - MVP ComCamp -2nd Round Day 2
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
 
Midworks
MidworksMidworks
Midworks
 
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
負荷分散勉強会
負荷分散勉強会負荷分散勉強会
負荷分散勉強会
 
プロレス クラウドExpo 20140515(公開版)
プロレス クラウドExpo 20140515(公開版)プロレス クラウドExpo 20140515(公開版)
プロレス クラウドExpo 20140515(公開版)
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
 
クラウド型グループウェアの選び方 3つのポイント
クラウド型グループウェアの選び方 3つのポイントクラウド型グループウェアの選び方 3つのポイント
クラウド型グループウェアの選び方 3つのポイント
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
20121009 cybozu.com kintone資料
20121009 cybozu.com kintone資料20121009 cybozu.com kintone資料
20121009 cybozu.com kintone資料
 

More from 増田 亨

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
増田 亨
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
増田 亨
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
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
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
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 基幹システムの再定義と再構築
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 

ドメイン駆動設計サンプルコードの徹底解説