ドメイン駆動設計再入門

61
ドメイン駆動設計 再入門 グロースエクスパートナーズ(株) ITアーキテクト 和智 右桂 Developers Summit 2015

Upload: yukei-wachi

Post on 16-Jul-2015

7.269 views

Category:

Technology


0 download

TRANSCRIPT

ドメイン駆動設計 再入門

グロースエクスパートナーズ(株) ITアーキテクト 和智 右桂

Developers Summit 2015

和智 右桂

JavaEE勉強会 所属

グロースエクスパートナーズ株式会社 勤務

Yukei Wachi

@digitalsoul0124Digital Romanticism

http://d.hatena.ne.jp/digitalsoul

ネコ好き

Photo by @digitalsoul0124 All rights reserved.

IT アーキテクト

時々翻訳をしています

Coming Soon !

• DDD nutshell • DDDの魅力 • システムの中のDDD • まとめ

アジェンダ

Photo by @digitalsoul0124 All rights reserved.

スライド中で使用されている画像について、 その著作権の全部または一部は、 クレジットに示した著者によって保留されています。

DDD nutshell

基礎

https://www.flickr.com/photos/pgoyette/2280685630/

モデルとは?

“モデルとは、 知識の表象である”

- Trygve Reenskaug

1979

http://www.flickr.com/photos/knilram/64366434/

“メンタルモデルを写し取るもの”出典:http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html by Trygve M. H. Reenskaug

Mental Model

MVCからDCIへ

DCIアーキテクチャ

モデル・ビュー・コントローラhttp://d.hatena.ne.jp/digitalsoul/20100913/1284330448

http://d.hatena.ne.jp/digitalsoul/20100131/1264925022

Domain-Driven Design http://www.flickr.com/photos/hlegius/3072942016/in/photostream/ by Hélio Costahttps://www.flickr.com/photos/kakutani/608079788/

本に書かれていること

第1部 ドメインモデルを機能させる

モデルの基本的な用法 1. モデルと設計の核心の相互作用 • モデルと設計/実装を結びつける • →モデル駆動設計

2. コミュニケーションの基盤 • モデルの言葉を会話でも使う • →ユビキタス言語

3. 蒸留された知識 • ドメインエキスパートの知識の表現

http://www.flickr.com/photos/biker_jun/4450890981/

モデルはソフトウェアの中核となる

モデルはビジネスパーソンと開発者をつなぐhttps://www.flickr.com/photos/adriansnood/14252302357/

第2部 モデル駆動設計の 構成要素

モデルの実装のために 1. モデルのためのレイヤを作る • UIおよび永続化層との分離 • →レイヤ化アーキテクチャ

2. ドメインレイヤ内でモデルを実装する • パラダイムとしてのオブジェクト指向

オブジェクト

オブジェクト

Search

Small Pop-Up

Pop-Up Menu

Small Combo

Combo BoxBits

BobsThings

Stuff

OKCancel

Label

Ends

Odds

Help Tag

Explanotext

A Very Nice Window Indeed

SIDEBAR

Search

Odds

Ends

UIデータベース

リポジトリクライアント

オブジェクト

ドメイン層

“ドメイン層とは、モデルが息づく場所”

第3部 より深い洞察へ向かう リファクタリング

モデルの深化 • 時間をかけてモデルは深まっていく • モデリングは発見のプロセス • ブレイクスルー • 深いモデルを作るためのテクニック • 暗黙的な概念の明示化 • しなやかな設計 • 先達からの学習 • デザインパターン

第4部 戦略的設計

モデリングのスケールアップ • モデルの整合性 • モデルの境界設計 • 蒸留 • 本質の抽出 • 大規模な構造 • 巨大なシステムの俯瞰

https://www.flickr.com/photos/gulfu/15704325507/

後に続く本

モデルを核としたシステム観 • GOOS (2009) • Steve Freeman、Nat Pryce • テストをガイドとして、オブジェクト指向のシステムを育てる

• DSL (2010) • Martin Fowler • “DSLは、モデルの表層を取り巻くベニヤのようなものである”

DDDの魅力

https://www.flickr.com/photos/ideacreamanuelapps/3541399009/

ある抽象度でのモデリングは絶対に必要

ソフトウェアとしての本筋https://www.flickr.com/photos/shoobydooby/389551020

SIの現場への福音https://www.flickr.com/photos/ideacreamanuelapps/3541399009/

現場の閉塞感とは?

サイロ

https://www.flickr.com/photos/jesusbelzunce/7235172294

https://www.flickr.com/photos/spyker3292/5562267244/

規律

https://www.flickr.com/photos/mythoto/2441449507

http://www.flickr.com/photos/symphoney/76513801/

トランザクションスクリプト

•顧客と会話しながら • イテレーティブかつインクリメンタルに • 変化に柔軟に対応しながら • 技術的に難易度の高いものを作る

https://www.flickr.com/photos/dariobn/15460074140

Agile

ただし

バランスが大切

https://www.flickr.com/photos/cs-fotografie/15448459660/

システムの中の DDD

広告 注文 請求

広告を作る

広告を参照する 注文する 請求書を

作る請求書を送る

Alister Cockburn “Writing Effective Use Cases” Addison-Wesley 2001 p.62

モデルをどこまで保つべきか?

作るのは ドメインモデルだけでいいのか?

ドメインレイヤの外側 • ユーザーインターフェイス • 永続化層 • 他システムとの統合層

オブジェクト

オブジェクト

Search

Small Pop-Up

Pop-Up Menu

Small Combo

Combo BoxBits

BobsThings

Stuff

OKCancel

Label

Ends

Odds

Help Tag

Explanotext

A Very Nice Window Indeed

SIDEBAR

Search

Odds

Ends

UIデータベース

リポジトリクライアント

オブジェクト

ドメイン層

すべてを統合する

https://www.flickr.com/photos/ofernandezberrios/2719742541

すべての機能は複雑なのか?

・トランザクションスクリプト  ・ユーザーの要求を満たす手続き ・ドメインモデル   ・複雑なロジックを    オブジェクト指向で解決する

機能追加のコスト

ロジックの複雑度

トランザクションスクリプト

ドメインモデル

損益分岐点を見極める

複雑さは囲い込む

https://www.flickr.com/photos/24354425@N03/15735373141

“慣れた人に任せるしかないよね” -- Martin Fowler(PofEAA)

http://www.flickr.com/photos/52086903@N07/5611639409/

何を対象とするのか?

デザインするのは メンタルモデルだけでいいのか?

ドメイン

ドメイン

ドメイン

ユーザードメイン

システムの外側で 起きることへの配慮

https://www.flickr.com/photos/mtsofan/14303159072/

顧客と同じものを見る

成長するのは モデルだけなのか?

システムを取り巻く流れ • 企業のビジネス • システムを使う人の動き • 社会の状況

https://www.flickr.com/photos/pablolfc/8508796272/

https://www.flickr.com/photos/pablolfc/8508796272/

システム全体のフィードバックループを設計する

https://www.flickr.com/photos/brewbooks/7358153986

チームも成長するhttps://www.flickr.com/photos/brent_nashville/15623635958/

まとめ

https://www.flickr.com/photos/kanaka/3002744372/

DDDは素晴らしい構想

https://www.flickr.com/photos/gsfc/6074582633/

システム全体で考えよう

最後に

https://www.flickr.com/photos/antontwang/10221284164/

世界に対するエンジニアの貢献は コードの優劣では決まらない

システムを通じて 社会に貢献する

ありがとうございました!Photo by @digitalsoul0124 All rights reserved.