Skip to main content
ドメイン駆動設計入門
和智 右桂 @digitalsoul0124
DevLOVE 2010.10.27
Beautiful Development
和智 右桂
JavaEE勉強会 所属
InfoQ Japanでときどき翻訳
Yukei Wachi
@digitalsoul0124
Digital Romanticism
http://d.hatena.ne.jp/digitalsoul
ネコ好き
Photo by @digitalsoul0124 All rights reserved.
思想系プログラマ
•導入
•オブジェクトとは?
•モデルとは?
•ドメイン駆動設計とは?
アジェンダ
Photo by @digitalsoul0124 All rights reserved.
スライド中で使用されている画像について、
その著作権の全部または一部は、 クレジットに示した著者によって保留されています。
導入
Domain-Driven Design http://www.flickr.com/photos/hlegius/3072942016/in/photostream/ by Hélio Costa
Eric Evans http://www.flickr.com/photos/chrstopher/1447594745/ by Chrstopher
オブジェクトとは?
デザインパターンを
実装するためのもの?
Strategy
Composite
Visitor
Chain of Responsibility
Template
Immersive Archeology - Aura Lily breathes life into the architecture and culture of Ancient Egypt
http://www.flickr.com/photos/pathfinderlinden/199857439/ by John E. Lester
The word no made from jigsaw puzzle pieces http://www.flickr.com/photos/horiavarlan/4536149424/ by Horia Varlan
オブジェクト指向があって
パターンがある。
その逆ではない。
...Insert Caption Here... http://www.flickr.com/photos/darrentunnicliff/3432070258/ by ĐāżŦ {bad contact, no biscuit}
現実世界の モノ ?
動物オブジェクト
狐オブジェクト
狸オブジェクト
woodland animals http://www.flickr.com/photos/merwing/4460283913/ by merwing✿little dear
cute but wrong http://www.flickr.com/photos/gerardstolk/4989786533/ by Gerard Stolk
虹は何種類の色からできている?
Rainbows End http://www.flickr.com/photos/tomraven/3045385852/ by TomRaven
7色?
誰かがグラデーションに名前をつけただけ
color wheel http://www.flickr.com/photos/unleashingmephotography/2316833560/ by unleashingmephotography
僕らは言葉によって世界を切り分け
そこに名前を与え
意味に囲まれて生きている
XIX: The Dyson Sun http://www.flickr.com/photos/arenamontanus/3407128256/ by Arenamontanus
オブジェクトは
概念 を
表現するためのもの
Concept
Woman's Hands with Rose http://www.flickr.com/photos/stephenkwilli/3258065448/ by Stephen K. Willi
モデルとは?
Fashion @ the Curve - Jasmine http://www.flickr.com/photos/duke9042004/2971587200/ by duke9042004
モデル・ビュー・コントローラ
MVC
Model
View
Controller
Model
これがモデル?
if (hoge) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (fuga) {
if (fuzz) {
// do something
}
} else {
if (buzz) {
// do something
}
}
}
}
}
if(hoge){
for(inti=0;i<10;i++){
for(intj=0;j<10;j++){
if(fuga){
if(fuzz){
//dosomething
}
}else{
if(buzz){
//dosomething
}
}
}
}
}
M
!?
Script View Controller
Procedure View Controller
いわゆる
トランザクションスクリプト
Ancient Tamil Script http://www.flickr.com/photos/symphoney/76513801/ by Idol
確かに、処理の流れは分かりやすいけれど...
モデルとは、
知識の表象である
- Trygve Reenskaug
Tree of Knowledge http://www.flickr.com/photos/knilram/64366434/ by Knilram
1979
メンタルモデルを写し取るもの
出典:http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html by Trygve M. H. Reenskaug
Mental Model
言葉によって構築された、世界の像
メンタルモデルとは
kandinsky_composition_viii http://www.flickr.com/photos/williamcromar/4598260907/ by williamcromar
!e way we see " world
Object O#ented
概念をクラスとして表現し
London Bridge (Tower Bridge) : Reflection on the River Thames http://www.flickr.com/photos/anirudhkoul/3499471010/ by Anirudh Koul
メンタルモデルを映し取る
ドメイン駆動設計とは?
ドメインとは?
知識を持ち、
影響を与え、
活動する領域
Sphere http://www.flickr.com/photos/maurizio_l/3477330734/ by mlaudisa
Domain
ドメインモデルとは?
専門家は
ドメインをとらえる
モデルを持っている
Astrolabe http://www.flickr.com/photos/kotomi-jewelry/4171052675/ by Kotomicreations (aka- kotomigd)
Domain Model
ドメイン駆動設計とは?
まず、ドメインとドメインロジックに
焦点を合わせる
複雑なドメインの設計は
モデルをベースにする
Astrolabe http://www.flickr.com/photos/biker_jun/4450890981/ by Biker Jun (Offseason mode!)
Domain D#ven Design
まずは、ドメインモデルを共有しよう!
Microsoft Bing Maps' datacenter http://www.flickr.com/photos/scobleizer/4870003098/ by Robert Scoble
武器は言葉
同じ言葉で、同じものを見る
Aurora (by unknown) http://www.flickr.com/photos/stijnvogels/20282205/ by Stijn Vogels
One team, one langua%
言葉は世界を切り分けるもの
他の言葉との関係において意味を持つ
World Map 1689 — No. 1 http://www.flickr.com/photos/caveman_92223/3185534518/ by Chuck “Caveman” Coker
モデルを構成する言葉を
あらゆる場所で使う
会話でも、ドキュメントでも
ユビキタス言語
Ubiquit&s
Langua%
Interview: The Colour Of Sound 17.10.08 http://www.flickr.com/photos/divid3d/2961571702/ by divid3d
あらゆる場所...
もちろん、コードの中でも
モデル駆動開発
Model D#ven Development
ドメインモデルを反映してソフトウェアを作る
escher wannabe b/w http://www.flickr.com/photos/midlander/54915243/ by you are your atman
A Diamond For The Love Flower DUC #57 http://www.flickr.com/photos/kacey/515389402/ by KaCey97007
専門家 開発者
ドメインモデル
ソフトウェア
どうやって?
アーキテクチャ
プロセス
3D Character and Question Mark http://www.flickr.com/photos/crystaljingsr/3914729343/ by 姒儿喵喵
アーキテクチャとは
構造を規定しつつ、可変性を支える戦略
City Planning III http://www.flickr.com/photos/42311564@N00/2410209145/ by Sebastian Niedlich (Grabthar)
レイヤ型
アーキテクチャ
ドメインレイヤとは、
ドメインモデルが息づく場所
DSC_0082 http://www.flickr.com/photos/artgoeshere/2338940084/ by artgoeshere
Layered
Architecture
ドメインモデルの構成要素
エンティティ
サービス
バリューオブジェクト
リポジトリ
Bright Blocks http://www.flickr.com/photos/venosdale/4323751812/ by KTVee
Entity
Value Object
Service
Repository
ファクトリ
Factory
Aggregate
集約
モジュールModule
イテレーティブなプロセス
コミュニケーションを通じて
モデルは深みを増していく
"S'il te plaît, fais moi un dessin..." http://www.flickr.com/photos/locktofob/4212943811/ by Locktofob
deep model
言葉に導かれて...
新しい言葉を見つけることで
見えていなかったものが見えてくる
deeper insight
366 • 18 • New frames http://www.flickr.com/photos/sveinhal/2201546999/ by Pragmagraphr
Break(r&gh
変化は突然訪れる
Junk yard sexy (spark) http://www.flickr.com/photos/28481088@N00/2746176084/ by tanakawho
積み重ねた日々が
ある日ブレイクスルーを起こす
この変化を支えるもの
レイヤ型アーキテクチャ
柔軟に設計されたモデル
Cat stairs http://www.flickr.com/photos/fofurasfelinas/54837986/ by fofurasfelinas
Layered Architecture
Su)le Design
もう一歩先へ...
戦略的設計
文脈
抽出
大局的構造
システムが巨大化しても
モデルは実装と結びついていなければならない
ISS http://www.flickr.com/photos/wildopallei/2087950431/ by Opal Lei
Context
D*tillation
lar%-scale ,ructureStrategic Design
言葉の意味を支えるもの
それが、文脈
20100411robodiversity http://www.flickr.com/photos/worldworldworld/4509419598/ by cesarharada.com
B&nded Context
Context Map
本質を見極めろ!
Drip http://www.flickr.com/photos/amagill/3252897830/ by AMagill
Core Domain
本質を抽出し
他の雑多なものから
切り離す
大局観を失うな!
大局的構造によって
システムを俯瞰的に理解する
Fall Creek Cornell Planations Aerial Photo http://www.flickr.com/photos/24994567@N06/2604256130/ by lvanvlee8
Sy,em Metaphor
Evolving Order
M*sion Complete !
Photo by @digitalsoul0124 All rights reserved.
つまづくことがあっても、
立ち上がって
前へ進んでいけ!
- Eric Evans
Try, Try again.
A Garden of Climbs http://www.flickr.com/photos/cptspock/2557842978/ by Jasen Miller
最後に
One more (ing...
ウォーターフォールだからできない?
トランザクションスクリプトで
書くことになっている?
お前が欲しいのは口実だろう?
Waterfall
Transaction Sc#pt
クラス名にこだわっているか?
メソッド名にこだわっているか?
変数名にこだわっているか?
世の中に不満があるなら
自分を変えろ!
関心事は適切に分離されているか?
コードの臭いにふたをしていないか?
Name
Concern
Refacto#ng
要件を理解しているか?Model
そして何より
コードに
誇りを持っているか?
P#de
Fai(
未来を創れ
お前にだって
コードが書けるだろ
IDEだってある
コミュニティにも
アクセスできる
ソフトウェアは一編の小説である
緻密に構築され
美しく語られなければならない
ご質問は
ありますか?
ありがとうございました!
Photo by @digitalsoul0124 All rights reserved.