Submit Search
Upload
ドメインモデルの育て方
•
38 likes
•
13,335 views
増田 亨
Follow
BPStudy #82 2014/6/27 ギルドワークス「正しいものを正しくつくる」、市谷さんとの合体発表。 ドメイン駆動設計。
Read less
Read more
Software
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
Recommended
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
ドメイン駆動設計入門
ドメイン駆動設計入門
増田 亨
More Related Content
What's hot
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
What's hot
(20)
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
Tackling Complexity
Tackling Complexity
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
Similar to ドメインモデルの育て方
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
ドメイン駆動設計入門
ドメイン駆動設計入門
増田 亨
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
OCHI Shuji
Developer's Summit 夏 EnterpriseTED 資料
Developer's Summit 夏 EnterpriseTED 資料
Atsushi Takayasu
uniPaaS RIA Pre
uniPaaS RIA Pre
skudoh
Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門
Akira Hatsune
世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しよう
dikehara
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
Ken Azuma
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
インフラジスティックス・ジャパン株式会社
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
日本マイクロソフト株式会社
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
Ken Azuma
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
Yoshitaka Seo
2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~
Takeshi Shinmura
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
Tsuyoshi Hirayama
スマ研第2回レポート
スマ研第2回レポート
Shinpei Niiyama
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
インフラジスティックス・ジャパン株式会社
ソフトウェアとは
ソフトウェアとは
Kimiyuki Yamauchi
Vantan shinsuke miyaki_upload
Vantan shinsuke miyaki_upload
Shinsuke Miyaki
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
インフラジスティックス・ジャパン株式会社
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
Yoshitaka Seo
Similar to ドメインモデルの育て方
(20)
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
ドメイン駆動設計入門
ドメイン駆動設計入門
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
Developer's Summit 夏 EnterpriseTED 資料
Developer's Summit 夏 EnterpriseTED 資料
uniPaaS RIA Pre
uniPaaS RIA Pre
Windowsストア[DB]アプリ入門
Windowsストア[DB]アプリ入門
世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しよう
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
スマ研第2回レポート
スマ研第2回レポート
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
お客様が望んでいるモダンデスクトップアプリとは?/傾向と対策 Part1
ソフトウェアとは
ソフトウェアとは
Vantan shinsuke miyaki_upload
Vantan shinsuke miyaki_upload
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
More from 増田 亨
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
増田 亨
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
増田 亨
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
SoR 2.0 summary
SoR 2.0 summary
増田 亨
毎日が越境だ!
毎日が越境だ!
増田 亨
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
増田 亨
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
増田 亨
More from 増田 亨
(20)
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
DDD sample code explained in Java
DDD sample code explained in Java
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary
SoR 2.0 summary
毎日が越境だ!
毎日が越境だ!
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
ドメインモデルの育て方
1.
ドメインモデルの育て方 ギルドワークス 増田 2014年6月27日 ソフトウェアを正しく作るための BP Study
#82
2.
現実世界/モデルとコード 現実世界 モデル (模型) ソースコード 単純化 コードで 表現 動くソフトウェア
3.
現実世界/モデルとコード 現実世界 モデル (模型) ソースコード 単純化 コードで 表現 動くソフトウェア 一回では うまくいかない 一回では うまくいかない
4.
モデリングと設計のパラダイム • 画面・帳票モデル – 画面一覧、画面遷移図、項目定義書、…
スマートUI
5.
モデリングと設計のパラダイム • 画面・帳票モデル – 画面一覧、画面遷移図、項目定義書、… •
機能モデル – 機能一覧、入出力項目定義、処理詳細、… スマートUI トランザクション スクリプト
6.
モデリングと設計のパラダイム • 画面・帳票モデル – 画面一覧、画面遷移図、項目定義書、… •
機能モデル – 機能一覧、入出力項目定義、処理詳細、… • データモデル – ER 図、テーブル一覧、テーブル定義書、… スマートUI トランザクション スクリプト Active Record
7.
モデリングと設計のパラダイム • 画面・帳票モデル – 画面一覧、画面遷移図、項目定義書、… •
機能モデル – 機能一覧、入出力項目定義、処理詳細、… • データモデル – ER 図、テーブル一覧、テーブル定義書、… • オブジェクトモデル – パッケージ図、クラス図、コラボレーション図、… スマートUI トランザクション スクリプト Active Record ドメイン モデル
8.
三層+ドメインモデル プレゼンテーション層 アプリケーション層 データソース層
9.
三層+ドメインモデル プレゼンテーション層 アプリケーション層 データソース層 OrderForm.vm OrderConfirm.vm OrderRegistered.vm @Controller class OrderEntryController … //
bind & validate @Service class OrderRegisterService … void register( Order order ) @Repository class OrderDatasource … void save( Order order )
10.
三層+ドメインモデル プレゼンテーション層 アプリケーション層 データソース層 OrderForm.vm OrderConfirm.vm OrderRegistered.vm @Controller class OrderEntryController … //
bind & validate @Service class OrderRegisterService … void register( Order order ) @Repository class OrderDatasource … void save( Order order ) ドメインモデル class Order class Items class ShipTo class BillingTo class ContactInfo … interface OrderRepository <<use>> import model.Order ロジックの抽出と移動 矢印の意味
11.
プロジェクトの進行モデル • プロジェクト初日 – 顔合わせとご挨拶、プロジェクトの概要説明
12.
プロジェクトの進行モデル • プロジェクト初日 – 顔合わせとご挨拶、プロジェクトの概要説明 •
仕様が具体的になり始める – 打合せ、ドキュメント、…
13.
プロジェクトの進行モデル • プロジェクト初日 – 顔合わせとご挨拶、プロジェクトの概要説明 •
仕様が具体的になり始める – 打合せ、ドキュメント、… • コード量が急速に増え始める – 開発環境が整って、人が集まって、リズムがでてき た
14.
プロジェクトの進行モデル • プロジェクト初日 – 顔合わせとご挨拶、プロジェクトの概要説明 •
仕様が具体的になり始める – 打合せ、ドキュメント、… • コード量が急速に増え始める – 開発環境が整って、人が集まって、リズムがでてくる • 開発終盤 – 仕様の変更/追加/再定義、バグとの戦い、性能問題
15.
プロジェクトの進行モデル • プロジェクト初日 – 顔合わせとご挨拶、プロジェクトの概要説明 •
仕様が具体的になり始める – 打合せ、ドキュメント、… • コード量が急速に増え始める – 開発環境が整って、人が集まって、リズムがでてきた • 開発終盤 – 仕様の変更/追加/再定義、バグとの戦い、性能問題 • リリース後 – 障害(バグの発覚)、積み残し開発、追加開発、…
16.
1.プロジェクトの初日の設計 • パッケージ図 顧客 商品 注文 出荷 売上・請 求・回収 値引き
返品 <<use>> ( = import 文) 業務の基本構造 =プログラムの基本構造 参照関係の「複雑」さや「あいまい」さが、設計課題を暗示している ? ? ?
17.
2.仕様が具体的になりはじめたら • ドメインモデルの基礎部品を増やしていく – 値オブジェクト –
振る舞いを持った区分 – ファーストクラスコレクション • 要求に出てくる「言葉」をマッピング – パッケージ名 – クラス名 – メソッド名 • コード量とクラスの数は比例する – クラスの数が変わらずコードが膨らみはじめたら警戒 警報
18.
ドメインモデルの初期の育て方 日付 期間 予定日 有効期限 場所 地域区分 商品種類 顧客区分 単価 数量 税率 型式 翌月 拠点 キャンペーン Event (出来事) アプリケーションサービス Reference (参照/追跡) Repository (記録) Transfer (通知) Policy (判断) (制約) 部門 役割 担当者一覧 ドメインモデルの基礎部品 端数 超重要 ここを 重点的に 育てる ユースケースの実装 業務の主な 関心事 受注一覧
19.
値オブジェクト String StringBuilder List<String> BigDecimal Integer Caleldar Date/Long 起算日(InitialDate) 期限(DueDate) 有効期間(ValidTerm) 金額(Money) 数量(Quantity) 単位(Unit) 商品名称(ProductName) 備考(Remarks) 摘要(Abstract) +業務ロジック +業務ロジック +業務ロジック ドメイン固有の「型」を準備する 実装の詳細を隠ぺいする
20.
振る舞いを持った区分 Enum MemberType //会員区分 { normal,
silver, gold; Rate chargeRate() String description() Boolean isLimitOver() } 「区分」や「種別」はビジネスルールの存在を示唆 ビジネスルールを記述する場所を準備
21.
ファーストクラスコレクション (Customers) (OrderLines) (UsageHistory) (ToDoList) (UnReads) (Candidates) 顧客一覧 注文明細 利用履歴 To-do リスト 未読一覧 選択候補 ビューの一覧画面にほぼ対応する 業務の関心事が集中することが多い ・識別情報/区分/状態をすべて一覧したい ・関心事によって、検索条件と並び順を変えたい コレクションのカプセル化 private なコレクション宣言
+ public なメソッド群
22.
3.コード量が急速に増え始める • 失敗パターン – 画面単位や機能単位に分担して並行開発 –
ビュー、コントローラ、サービスクラスがファットになる – コードの重複 → 変更コストの増大 • 成功パターン – ドメインモデルに業務ロジックを集め続ける – 共有のドメインモデルをみんなでがんがんいじる – 痛い目に合う – そこで逃げない – みんなで会話しながら同じモデルを追いかける
23.
4.開発の終盤 • 時間との闘い – 仕様の変更・追加・再定義 –
バグとの戦い – 性能問題 • 現実 – モデル一貫性よりも、とにかく修正する – ただし、リファクタリングしたほうが結局は早くて確実なことが多い (スキルレベルによるけど) • Interface と実装の分離 (多態の導入) • 間接化(第3のクラスを導入して、クラスAとBの依存関係を無くす) • できれば – リファクタリングする – 最低限、マークしておいて、リファクタリング勉強会のネタにする – それが次のモデル・設計・開発の糧になる
24.
5.リリース後 • いろいろ起きる – 障害(バグの発覚) –
積み残し分の開発 – 追加開発 • ドメインモデルの真価がわかる時 – 業務を単純化したモデルが正しいか – モデルをうまくコードで表現できているか • 良いドメインモデルに成長していれば 変更は「楽」で「安全」になる – 修正箇所の特定 – 修正範囲の局所化 – 副作用の局所化 • リリース後のソフトウェアの成長に立ち会い続けること が、ドメイン駆動設計を会得する王道
25.
現実世界/モデルとコード 現実世界 モデル (模型) ソースコード 単純化 コードで 表現 動くソフトウェア 一回では うまくいかない 一回では うまくいかない
26.
三層+ドメインモデル プレゼンテーション層 アプリケーション層 データソース層 OrderForm.vm OrderConfirm.vm OrderRegistered.vm @Controller class OrderEntryController … //
bind & validate @Service class OrderRegisterService … void register( Order order ) @Repository class OrderDatasource … void register( Order order ) ドメインモデル class Order class Items class ShipTo class BillingTo class ContactInfo … interface OrderRepository <<use>> import model.Order ロジックの抽出と移動 矢印の意味
Download now