『DDD(ドメイン駆動設計)をやってみよう」に参加してきた
(写真:会場へ向かう途中にそびえ立つ中野サンプラザ。)
DDD(ドメイン駆動設計)に関しては、過去に1度、下記の勉強会に参加して以来となります。DDD本については興味を持っていたものの、敷居の高さ(?)に書籍購入を躊躇ってしまい、以降そのまま・・・という感じでした。そんな感じで今回の勉強会に参加です。
今回勉強会を主催された会場では、主に『B面』なテーマや技術について勉強会を行うことが多く、当初は『DDD』もB面に属していたそうです(笑)
DDDについてはその際に(B面のうちに)やるつもりではいたものの、DDDの翻訳本が出たり震災があったりやらで延び延びになってしまい、すっかり『A面』感満載となった現在に至り、実施の運びとなったようです。
ドメイン駆動設計(DDD)をやってみよう
- ドメイン駆動設計 (DDD) をやってみよう
- View more presentations from 増田 亨
- DDD こだわりポイント
- ドメインモデル:利用者の関心事の模型
- この設計・実装を開発の中心にする
- 最も優秀なエンジニアが最もパワーを注げるように
- 設計駆動開発
- 原則:設計してからコード
- もうひとつのDDD:Design-Driven Development
- ※設計とコードは明らかに違う、という教え方(新人など)
- モデル駆動設計
- Model-Driven Design / 言葉と絵で、関心事の模型を作って設計・実装
- Evolve:少しずつ、継続的に成長
- iterate(反復)/increment(増分)/continuous(絶え間なく)
- ※ビジネスの要請に合わせたIT側の取り組み。
- ※特許庁問題:役所ってのはやってみて改善するっていう体質ゼロ。そういう所には合わない。
- ※ビジネス的に継続的に変化して成長していく、という場合には合う。
- ※DDDもそういう分野向けの開発には合うのでは無いだろうか。
- ドメインモデル:利用者の関心事の模型
- いろいろあるよね xDD
- 華麗で楽しい?
- シングル xDD
- ケントベックがやるならこういうのは(例:テスト駆動)は美しいと思う
- でも、リアルのプロジェクトでは・・・?
- 悪路走破には、四輪駆動
- マルチ xDD
- 多くのプロジェクトがこっちなのでは
- 複数の駆動を上手く組み合わせて進む
- より速く、より効果的に
- 例)電気自動車エリーカ
- ポルシェ911ターボを上回る加速性能、ポルシェの10倍の燃費効率
- 時速370km!夢のスーパー電気自動車「エリーカ」 | 特集 | パワーアカデミー
- 8輪駆動
- 駆動力の分散配置(8つのインホイールモータ&変則ギヤ)
- 8輪の強調動作(センサーとシグナル同期)
- 100円で100km走れるように、というコンセプトで開発されたらしい
- チームメンバーもお互いが駆動を持って強調し、シグナルを連携し合えば・・・
- 例)電気自動車エリーカ
- シングル xDD
- DDD的8輪駆動(図が見えなかったので割愛w)
- ドメイン駆動設計を実践すると
- 利用者の要求のキャッチ力が高まり
- 利用者の関心事の構造が見えてくる
- 要件の追加や変更が簡単で安全になる
- 6〜7割、理不尽な事が無くなった(気がする)
- DDDはソフトウェア設計
- 基本パターン:Whole-Part
- (関心の分離)+(協調)の基本パターン。
- 繰り返し、適用シーンが出てくる、基本中の基本パターン。
-
- 全体:有用でシンプルな設計が必要
- 部品:関心事の分離、違っていたら部品に分ける
- 単機能なものをたくさん
- 管理するのは全体側の内部設計で対応
- 部品をどんな構造でまとめておくか
- コントローラ役の役割
- コントロールするのか、委譲するのか(委譲設計)
- ここのレベルを上げて行かないとコントローラに処理が集中し、見通しが悪くなる
ドメイン駆動設計:スタートアップ / 準備とトライアル
- 実践シナリオ
- 利用者の関心事の置き場所を作る
- 利用者の関心事を見つける
- 利用者の関心事をコードにしてみる
- 利用者の関心事の妥当性を検証する(ユーザにとって価値のある検証を)
- 利用者の関心事の改善点を発見する
- ※まずは、このサイクルを1回、回せるかどうか。ハードルは高い。
- 関心の分離(1)
- 画面
- UIコントローラ
- DBアクセス
- メール送信
- メッセージング
- 置き場所の追加:[利用者の関心事を記述するクラス群]を利用する。
- 画面→→→→→→→→↓
- UIコントローラ→→→↓
- DBアクセス→→→→→→→→[利用者の関心事を記述するクラス群]
- メール送信→→→→→↑
- メッセージング→→→↑
- 利用者の関心事クラス
- 顧客登録サービス<
>が各要素を利用。あくまでも利用者から見た時のイメージ。 - 顧客<
> - 顧客リポジトリ<
> - 顧客トランスファー<
>
- 顧客<
- 私達が使っている実装技術(注:発表者の環境はJava/Springに特化したもので進めています。)
- [画面] Velocityテンプレート / Spring Bind, Bean Validation
- [UIコントローラ] SpringMVC / Spring Web Flow
- [DBアクセス] SpringORM / myBatis, SQLMap
- [メール送信] Spring Mail / Apache James
- [メッセージング] Spring JMS / Apache MQ, MuleESB
- ※SpringFrameworkには、DDDを漁っていて辿り着いた。
- ロッドジョンソン『Springの方で全部用意するから・・・」
- DDD最初の一歩
- とりあえず置き場を作って、ここにドメインクラスを作ってUIクラスやコントローラクラスから利用してみる
- 最低一つ、クラスを作る
- 最低一つ、setter/getter以外のメソッドを作る
- 顧客の言葉/業務要件を手がかりに
- サブパッケージ追加/クラス追加/フィールド追加/メソッド追加
- ごちゃごちゃしてくるので整理整頓を繰り返す
- 名前の変更/クラスの移動/フィールドの移動/メソッドの移動
- スタートアップ
- まずはやってみる
- つまずく
- 本を漁る
- (本来『クライアントと話す』だが、個人的には)
- →:対象業務のハンドブックや入門書が良い。
- 英語本は、ドメインモデルの パッケージ名/クラス名/メソッド名 の宝庫。
- 試してみる
- 工夫してみる
ドメイン駆動設計 ブラッシュアップ(1)リファクタリング(設計の改善)
- 業務の関心事の聞知
- <注文入力画面オブジェクト>データ
- 業務知識がUIのコードに埋もれている
- 画面オブジェクトから業務の関心事情報を抽出
- コントローラから業務ロジックを抽出
- 業務ロジックをドメインオブジェクトに移動
- 業務の関心事だけ取り出して、別クラスにする
- <注文入力画面オブジェクト>データ
- 手続き型の設計(手続き+データ)をドメインオブジェクトにリフォーム
- 業務のロジックは情報の近くに移動する
- 業務データと業務ルールをまとめる
- 条件記述から業務ロジックを抽出
- クラス設計に業務の記述を増やす
- コレクションのカプセル化
- 技術的な関心→業務の関心
- 業務でやりたい事をメソッドで表現
- 単なる値をドメインオブジェクトに昇格する
ドメイン駆動設計 ブラッシュアップ(2)設計のヒント、パターンの利用
- ドメインモデル設計パターン
- 業務ドメインに良く出てくる設計パターン
- 用語や概念
- 何が関心事か?
- どう設計するか?
- パターン集の目次
- さまざまな関心事を俯瞰する全体マップ
- アイデアとしては良い。
- アナリシスパターンは良書だが、実際に内容を実装に適用した事は無い・・・
- 目次の順番=業務の関心事の順番、と思って貰ってもよいだろう。良書である。
- パターン=設計のヒント
- 関心の分離のしかた
- 協調のさせ方
- 業務ドメインに良く出てくる設計パターン
- 参考書籍
- ドメイン駆動設計 by Evans:まえがき、第1部。
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (131件) を見る
- ビジネスパターンによるモデル駆動設計 by Hruby:2章 構造パターン、5章 振る舞いパターン。
- 作者: Pavel Hruby,依田智夫,溝口真理子,依田光江
- 出版社/メーカー: 日経BP社
- 発売日: 2007/08/09
- メディア: 単行本
- クリック: 7回
- この商品を含むブログ (15件) を見る
- アナリシスパターン by Fowler:A.1.5 基本型
アナリシスパターン―再利用可能なオブジェクトモデル (Object Technology Series)
- 作者: マーチンファウラー,Martin Fowler,堀内一,友野晶夫,児玉公信,大脇文雄
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/04
- メディア: 単行本
- 購入: 7人 クリック: 89回
- この商品を含むブログ (70件) を見る
- PoEAA by Fowler:はじめに、2章 ドメインロジックの選択
エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)
- 作者: マーチン・ファウラー,長瀬嘉秀,株式会社テクノロジックアート
- 出版社/メーカー: 翔泳社
- 発売日: 2005/04/21
- メディア: 大型本
- 購入: 10人 クリック: 635回
- この商品を含むブログ (143件) を見る
- リファクタリング by Fowler:3章 変更の発散、変更の分散
リファクタリング―プログラムの体質改善テクニック (Object Technology Series)
- 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/05
- メディア: 単行本
- 購入: 94人 クリック: 3,091回
- この商品を含むブログ (312件) を見る
- ストリームラインオブジェクトモデリング by ニコラ:3章 協調パターン
ストリームラインオブジェクトモデリング―パターンとビジネスルールによるUML
- 作者: ジルニコラ,マイクアベニー,マークメイフィールド,Jill Nicola,Mike Abney,Mark Mayfield,今野睦,デュオシステムズ
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/12
- メディア: 単行本
- 購入: 1人 クリック: 3回
- この商品を含むブログ (9件) を見る
- UMLによるビジネスモデリング by エリクソン:5章 ビジネスルール
- The Data Model Resource Book
The Data Model Resource Book, Volume 2: A Library of Universal Data Models by Industry Types
- 作者: Len Silverston
- 出版社/メーカー: Wiley
- 発売日: 2001/03/07
- メディア: ペーパーバック
- クリック: 1回
- この商品を含むブログ (4件) を見る
- Data Model Patterns by Hay
Data Model Patterns: Conventions of Thought
- 作者: David C. Hay
- 出版社/メーカー: Dorset House
- 発売日: 1995/11/01
- メディア: ハードカバー
- クリック: 11回
- この商品を含むブログ (7件) を見る
- ドメイン駆動設計 by Evans:まえがき、第1部。
- Value Object
- 基本語彙の設計・実装パターン
- String, BigDecimal, Date/longのラッパー
- 型宣言→表現力の向上
- 氏名、社名・・・
- 金額、数量、日数・・・
- 登録日、締切日・・・
- 不変→振る舞いの安定
- パラメータ付コンストラクタで生成
- setメソッド禁止
- 演算結果は、新たにオブジェクトを生成して返す
- Stringと同じ
- 6つの役割で考える
- 情報保持
- サービス(演算)提供
- 外部への見せ方
- 部品群の構造化
- 制御役
- 調整役
- 識別にフォーカスしたクラス
- 識別番号(参照番号)
- 発番方法
- 一意性確保/検証
- 認証
- 番号と実体の照合方法、記録
- 識別名
- 氏名、品名
- :
- 識別番号(参照番号)
…とここで、突如増田さんのPCのバッテリーが切れ、スライドが見れない状態に。この後は口頭ベースで進めて行きました。アドバンス編は聞き取れた内容のみメモ。
アドバンス編
- 隣接ドメインと領域の重なり
- 受注発注、注文
- 状態遷移
- ビジネスルールの宝庫。
- ステートマシンと状態遷移表を使えば安定したものは作れる。
- モデルを作ってお客様からフィードバックを得る点において、この分野は非常に難しい。
- イベント送信
- あいまい検索、表記のゆらぎを検索
- データが時系列に溜まった時に、どうやってそれらを扱うか、推定するか
最後に幾つかの質疑応答が行われて、本編終了。
実例(サンプル)を交えての解説が多目だったのでとても分かり易かったですね。ただ今回の増田氏を以てしても悩ましい部分もやはりあるようで(詳細はアドバンス編・質疑応答等辺りで)、取り組むには一朝一夕には行かない、険しいものであるな〜という印象はやはり変わらずな感じでした。
勉強してすぐに身に付く類のものではないでしょうし、参考文献を少しずつ読み解いてエッセンスを吸収して行きたいものですね。やっぱりDDD本(和訳)は購入して手元に置いておくべきか?(読むにしても冒頭1章辺りかな?^^;)
その他関連サイト: