Soumettre la recherche
Mettre en ligne
ドメインモデルの育て方
•
38 j'aime
•
13,334 vues
増田 亨
Suivre
BPStudy #82 2014/6/27 ギルドワークス「正しいものを正しくつくる」、市谷さんとの合体発表。 ドメイン駆動設計。
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 26
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Recommandé
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
Ooc 2020
Ooc 2020
Zenji Kanzaki
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
A AOKI
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
ドメイン駆動設計入門
ドメイン駆動設計入門
増田 亨
Contenu connexe
Tendances
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
Ooc 2020
Ooc 2020
Zenji Kanzaki
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
A AOKI
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
Tendances
(20)
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
Ooc 2020
Ooc 2020
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
Similaire à ドメインモデルの育て方
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
Similaire à ドメインモデルの育て方
(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
Plus de 増田 亨
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
増田 亨
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
SoR 2.0 summary
SoR 2.0 summary
増田 亨
Plus de 増田 亨
(20)
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
DDD sample code explained in Java
DDD sample code explained in Java
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary
SoR 2.0 summary
ドメインモデルの育て方
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 ロジックの抽出と移動 矢印の意味
Télécharger maintenant