SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
エリック・エヴァンスの
ドメイン駆動設計
!
7章:言語を利用する:応用例
すごく、、、AKIMICYUです、、、
第2部
モデル駆動設計の構成要素
第4章 ドメインを隔離する

第5章 ソフトウェアで表現されたモデル

第6章 ドメインオブジェクトのライフサイクル

第7章 言語を使用する:応用例 ここ
7.言語を利用する:応用例
4∼6章:堅固なモデル駆動設計を維持するための
パターンランゲージを個々に紹介

でも、実際のプロジェクトではパターンは組み合
わせて使用される

7章では、入り組んだ例(複合例)を紹介

モデルと設計が改良されていく様子(モデル駆動
設計)を、段階を追いながら見ていく
最初の要求
貨物輸送システム

1. 顧客貨物に対する主要な荷役を追跡する

2. あらかじめ貨物を予約する

3. 貨物が荷役の課程で所定の場所に到達した際、
自動的に請求書を顧客に送付する
輸送ドメインのモデル
クラス図(図7.1)

ドメインに関する知識を体系化

チームに対して言語を提供 → ユビキタス言語

要件を、ユビキタス言語で記述(p.165近辺)
モデルの改良
モデルの改良(1/5)
ドメインを隔離する:アプリケーションの導入

レイヤ化アーキテクチャの適用

ユーザレベルのアプリケーション機能

1. 追跡問い合わせ

2. 予約アプリケーション

3. イベント記録アプリケーション
モデルの改良(2/5)
エンティティと値オブジェクトを区別する

エンティティ: 顧客、貨物、荷役イベント、配
送記録、位置、、、

値オブジェクト: 配送仕様

役割は、それによって限定される関連を説明する
が、履歴や連続性は持たない(値オブジェクト)
モデルの改良(3/5)
輸送ドメインの関連を設計する

双方向の関連は、設計上問題

関連を れる方向はドメインに付帯する洞察を
捉えていることが多く、モデル自体を深める

る方向が制限されている関連もある(図7.2)
モデルの改良(4/5)
集約の境界(図7.3)

顧客、位置、輸送機器移動:

独自の同一性&多くの貨物から被共有 → それぞ
れ独自に集約を持ち、そのルートとなっていないと
いけない

貨物は?

明らかに集約ルート。境界を検討する必要あり
モデルの改良(5/5)
リポジトリを選択する

それぞれにリポジトリを用意、選ばれた集約ルー
トへのアクセスが与えられる(図7.4)

荷役イベントリポジトリは無し

配送記録との関連をコレクションとして実装
するための暫定処置? → 後で。
シナリオのウォークスルー
と設計見直し
決定のクロスチェック
常に段階を追って、シナリオを見ながら、アプリケーションの問
題を効果的に解決できることを確認

サンプルアプリケーションの機能(シナリオ)

貨物の荷出し地を変更する、リピーターへの対応、、、

オブジェクトの生成

貨物用のファクトリとコンストラクタ

荷役イベントへの追加には、配送記録への挿入が必要(図7.5)
設計の見直し(1/2)
リファクタリングのために立ち止まる

モデリングと設計は、絶えず前進するだけのプロセスで
はない

頻繁にリファクタリングを行い、モデルと設計を改善す
る新しい洞察を活用しなければ、立ち往生する

配送記録が持つ荷役イベントのコレクションをクエリと
して実装することで、荷役イベントの挿入が単純になり、
貨物集約との競合がらも解放される(図7.6)
設計の見直し(2/2)
輸送モデルにおけるモジュール

モジュール構成にモデルが影響をうける事例

「エンティティ/値オブジェクト/サービス」というモ
ジュールの切り方は、ドメインについての知識を伝え
ていない(図7.7)

「顧客/輸送/請求」という大まかなドメイン概念に基
づいたモジュール(図7.8) ← 素直な分割
新機能を導入する:
 配分チェック
新機能:配分チェック
配分チェックの要件(新規追加, 図7.9)

特定のタイプの貨物をどれくらい予約するべきか
について配分可能にしてイールドマネジメント

収益の高い貨物を、それほどでもない貨物で一杯
になったために積み込めないという事態を防ぐ

過小予約や過度のオーバーブッキングを回避
必要な対応(1)
2つのシステムを接続する(販売管理システムとの接続)

これまで取り組んできたものと同じモデルを念頭に書かれ
ていない(外部システム)

ユビキタス言語に混乱をきたさないよう、間に腐敗防止層
を設ける

名称を「配分チェックサービス」として、こちらのシステ
ムにおける責務を反映させる (×販売管理インタフェース)
必要な対応(2)
モデルを強化する:ビジネスのセグメント化(図7.10)

「このタイプの貨物をどれくらい予約してもよいか?」という質問に答えるた
めには、どのようなインタフェースを提供すればよいだろうか?

やっかいなのは貨物の「タイプ」とは何かを定義すること

今回は、他のシステムのドメインを、こちら側の観点で抽象化し直す

ドメインモデルを豊かにして、貨物にカテゴリが存在するという知識に適
応できるようにする必要がある

エンタープライズセグメント:ビジネスの分割方法を定義した次元軸の集まり

ドメイン責務を配分チェックサービスに移す(図7.11)
最後に
腐敗防止層やサービス、エンタープライズセグメン
トの使用によって、販売管理システムの機能を予約
システムへきれいに統合できた

エンタープライズセグメントを取得する責務を、な
ぜ貨物に持たないのか?

目的によって、モデルは異なる

ドメインの切り方の選択肢は多数

Mais conteúdo relacionado

Mais procurados

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 

Mais procurados (20)

現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
いまなぜドメイン駆動設計か
いまなぜドメイン駆動設計かいまなぜドメイン駆動設計か
いまなぜドメイン駆動設計か
 
マイクロサービス化に向けて
マイクロサービス化に向けてマイクロサービス化に向けて
マイクロサービス化に向けて
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かうドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
不動産販売システム
不動産販売システム不動産販売システム
不動産販売システム
 

Destaque

Presentacion convenio 620
Presentacion convenio 620Presentacion convenio 620
Presentacion convenio 620
joannamontero
 
Y si no podemos jubilarnos a los 67[1]...
Y si no podemos jubilarnos a los 67[1]...Y si no podemos jubilarnos a los 67[1]...
Y si no podemos jubilarnos a los 67[1]...
Rj Nada
 
Felices fiestas!!!!!!!!
Felices fiestas!!!!!!!!Felices fiestas!!!!!!!!
Felices fiestas!!!!!!!!
Tefuchi
 
Taller4
Taller4Taller4
Taller4
lolylf
 
Attachments 13 11_2010
Attachments 13 11_2010Attachments 13 11_2010
Attachments 13 11_2010
anabelentutora
 
Museo de bellas artes.
Museo de bellas artes.Museo de bellas artes.
Museo de bellas artes.
abcmrp
 
Power balneario caldes de boí
Power balneario caldes de boíPower balneario caldes de boí
Power balneario caldes de boí
Joel Gines
 

Destaque (20)

DDD読書会 アナリシスパターン
DDD読書会 アナリシスパターンDDD読書会 アナリシスパターン
DDD読書会 アナリシスパターン
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
La Arqueologia
La ArqueologiaLa Arqueologia
La Arqueologia
 
Brochure 2012 Baja
Brochure 2012 BajaBrochure 2012 Baja
Brochure 2012 Baja
 
Fraccione 1224438449644908-8
Fraccione 1224438449644908-8Fraccione 1224438449644908-8
Fraccione 1224438449644908-8
 
Influen. biblia en la lengua
Influen. biblia en la lenguaInfluen. biblia en la lengua
Influen. biblia en la lengua
 
Presentacion convenio 620
Presentacion convenio 620Presentacion convenio 620
Presentacion convenio 620
 
Iñigo
IñigoIñigo
Iñigo
 
UD10-Sistema de Representación
UD10-Sistema de RepresentaciónUD10-Sistema de Representación
UD10-Sistema de Representación
 
Y si no podemos jubilarnos a los 67[1]...
Y si no podemos jubilarnos a los 67[1]...Y si no podemos jubilarnos a los 67[1]...
Y si no podemos jubilarnos a los 67[1]...
 
Felices fiestas!!!!!!!!
Felices fiestas!!!!!!!!Felices fiestas!!!!!!!!
Felices fiestas!!!!!!!!
 
Chevrolet vivant
Chevrolet vivantChevrolet vivant
Chevrolet vivant
 
Lectura 4
Lectura 4Lectura 4
Lectura 4
 
Taller4
Taller4Taller4
Taller4
 
Attachments 13 11_2010
Attachments 13 11_2010Attachments 13 11_2010
Attachments 13 11_2010
 
Museo de bellas artes.
Museo de bellas artes.Museo de bellas artes.
Museo de bellas artes.
 
Informe diagnóstico
Informe diagnósticoInforme diagnóstico
Informe diagnóstico
 
Chennai Super Kings
Chennai Super KingsChennai Super Kings
Chennai Super Kings
 
Exposicion
ExposicionExposicion
Exposicion
 
Power balneario caldes de boí
Power balneario caldes de boíPower balneario caldes de boí
Power balneario caldes de boí
 

Semelhante a DDD7章 言語を利用する:応用例

ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
 
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
Teruo Adachi
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
masanori kataoka
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
 
E4勉強会 事後修正版
E4勉強会 事後修正版E4勉強会 事後修正版
E4勉強会 事後修正版
kounan13
 
XPages Mobile Application Development
XPages Mobile Application DevelopmentXPages Mobile Application Development
XPages Mobile Application Development
Atsushi Ono
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
Tomoharu ASAMI
 

Semelhante a DDD7章 言語を利用する:応用例 (20)

【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
 
エリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章までエリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
 
オープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアルオープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアル
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
Cakephp
CakephpCakephp
Cakephp
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
E4勉強会 事後修正版
E4勉強会 事後修正版E4勉強会 事後修正版
E4勉強会 事後修正版
 
Open棟梁概要説明 v02-00
Open棟梁概要説明 v02-00Open棟梁概要説明 v02-00
Open棟梁概要説明 v02-00
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
 
XPages Mobile Application Development
XPages Mobile Application DevelopmentXPages Mobile Application Development
XPages Mobile Application Development
 
Parallel Technology
Parallel TechnologyParallel Technology
Parallel Technology
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
Selenium IDE for primer
Selenium IDE for primerSelenium IDE for primer
Selenium IDE for primer
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 

Mais de akimichi Yamada

Fiddlerで通信のデバッグを効率化する
Fiddlerで通信のデバッグを効率化するFiddlerで通信のデバッグを効率化する
Fiddlerで通信のデバッグを効率化する
akimichi Yamada
 
Androidでテストってどないすんねん!
Androidでテストってどないすんねん!Androidでテストってどないすんねん!
Androidでテストってどないすんねん!
akimichi Yamada
 

Mais de akimichi Yamada (8)

情報処理技術者の倫理とWell being
情報処理技術者の倫理とWell being情報処理技術者の倫理とWell being
情報処理技術者の倫理とWell being
 
情報処理技術者のための技術士受験のすすめ
情報処理技術者のための技術士受験のすすめ情報処理技術者のための技術士受験のすすめ
情報処理技術者のための技術士受験のすすめ
 
NASのHDDが死にかけた話
NASのHDDが死にかけた話NASのHDDが死にかけた話
NASのHDDが死にかけた話
 
職業プログラマに必要な意識について
職業プログラマに必要な意識について職業プログラマに必要な意識について
職業プログラマに必要な意識について
 
20141114 ddd13章 より深い洞察へと向かうリファクタリング
20141114 ddd13章 より深い洞察へと向かうリファクタリング20141114 ddd13章 より深い洞察へと向かうリファクタリング
20141114 ddd13章 より深い洞察へと向かうリファクタリング
 
Fiddlerで通信のデバッグを効率化する
Fiddlerで通信のデバッグを効率化するFiddlerで通信のデバッグを効率化する
Fiddlerで通信のデバッグを効率化する
 
Phone gap + monaca
Phone gap + monacaPhone gap + monaca
Phone gap + monaca
 
Androidでテストってどないすんねん!
Androidでテストってどないすんねん!Androidでテストってどないすんねん!
Androidでテストってどないすんねん!
 

DDD7章 言語を利用する:応用例