Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

いまなぜドメイン駆動設計か

ドメイン駆動設計の現状と展望

  • Login to see the comments

いまなぜドメイン駆動設計か

  1. 1. いまなぜドメイン駆動設計か 現状と展望 2015年8月25日 有限会社システム設計 増田 野毛倶楽部(よこはまクラウド勉強会の真の姿?)賛江
  2. 2. 「ドメイン駆動設計」とは 厳しい現実の中で、ソフトウェア設計を習得しようと奮闘してき た技術者の物語。 不完全な状況の中で、抽象的な設計原則を、現実のソフトウェ アに適用するための助言。 「日本語版への序文」 by エリック・エヴァンスから エヴァンスは、ソフトウェア開発の成功も失敗も味わってきた。 この本は、エヴァンスが成功と失敗の両方から学んだ教訓を 伝えている。 「序文」 by マーチン・ファウラーから
  3. 3. エヴァンスが取り組んだ技術 「オブジェクト指向」と「XPスタイル」の設計 に、現場で取り組んだ成功と失敗の物語。 そこから学んだ教訓をまとめたものが 「ドメイン駆動設計」。 オブジェクト指向 エクストリーム・プログラミング 「まえがき」から
  4. 4. 「ドメイン駆動設計」の想定読者 • オブジェクト指向とエクストリーム・プログラミ ングの設計に、ある程度の知識がある技術 者 • OOとXPの設計原則を、実際のアプリケーショ ンに適用しようとして、理屈通りにいかない苦 労を経験した技術者 • 制約や障害の多い開発現場で、OOとXPを実 践する手引きや助言を求めている技術者 「まえがき」から
  5. 5. いまなぜドメイン駆動設計か? • オブジェクト指向の実践ノウハウの不足 • アジャイルの広がりと設計ノウハウの劣化
  6. 6. オブジェクト指向の実践ノウハウ不足 • オブジェクト指向(ができる言語)は、世の中 に広がった • オブジェクト指向分析設計の参考にすべき文 献は多いが、現場で使える実践的なガイドが 意外と少ない – 「ドメイン駆動設計」が書かれた動機のひとつ 「まえがき」から
  7. 7. アジャイルの広がりと設計の劣化 • XPやスクラムの母体(オブジェクト指向コミュ ニティ)では、オブジェクト指向の分析設計は 当たり前の手法であり、スキルだった • アジャイルが広がる中で、設計を軽視する風 潮が広がってしまった • その結果、オブジェクト指向分析設計を学び スキルを磨く機会や動機が減ってしまった • 「実践ドメイン駆動設計」が鳴らした警鐘
  8. 8. いまなぜOO&XPか? • 小規模・短納期のWebアプリケーション開発の機会が増えた – スマートフォンアプリのバックエンドとかも含めて – 作って動かすだけなら簡単にできるようになった (たとえばRoR) – 多産多死? • 技術もニーズも変化が激しく、全体をじっくり分析・設計している開 発スタイルでは対応できない • 生き残ったアプリケーションは、修正や拡張のニーズが多いが、設 計が貧弱だと、うまく対応できず、あったいうまにレガシー化する オブジェクト指向の「変更容易性」 エクストリーム・プログラミングの「変化適応性」
  9. 9. 開発スタイル YAXP:もうひとつのXP • とにかく動くソフトウェアを作り続ける • 究極のエクストリーム・プログラミングw • Web系のアプリケーション開発現場の実態? スタイル 例 最終形 (着地点) フェーズ分け 予測型 ウォータフォー ル 事前に厳密に定義 固定 要件定義/分析/設 計/製造/テスト 反復漸進型 RUP それなりに定義 反復ごとに精緻化 方向づけ/推敲/ 作成/移行 適応型 (アジャイル) XP スクラム YAXP ざっくりと定義 日々更新 今日、今週、今期、…
  10. 10. アジャイルとオブジェクト指向 • アジャイルは、オブジェクト指向コミュニティで 生まれ育った開発スタイル • オブジェクト指向の「変更容易性」が生み出し た開発スタイル • 相乗効果 – よいオブジェクト指向設計が、アジャイル(変更適 応性)を加速する – オブジェクト指向の分析・設計にはアジャイルな 変更適応型の開発スタイルが向いている
  11. 11. いまなぜドメイン駆動設計か? • アジャイル、特に「もうひとつのXP」の広がり – アジャイルな現場で、設計(オブジェクト指向)が 消えてしまった – オブジェクト指向の分析・設計の原則を学んだり、 現場で工夫しながら実践する機会の減少 – 設計の劣化の実害の顕在化 • 抽象的な理論ではなく、現場で必要な実践ノ ウハウのニーズ
  12. 12. 展望
  13. 13. クラウド時代のアプリケーション開発 • 全てがネット上にある – コンピュータ資源 – コンポーネントやツール – 技術情報 – コンテンツ • 生滅流転 – 個々の要素がどんどん変化していく – 要素の組み合わせ方がどんどん変化していく – ビジネスモデルもどんどん変化していく – ソフトウェア要求もどんどん変化していく
  14. 14. クラウド時代のアプリケーション開発 • エクストリーム・プログラミング – 変化を抱擁するための価値・原則・行動 – 全てがコード XXX as code • オブジェクト指向 – 変更容易性 – 抽象データ型/モジュール化/メッセージング
  15. 15. つまり • エクストリームプログラミングの原則、オブ ジェクト指向の原則を現場で実践するノウハ ウ集である「ドメイン駆動設計」は、クラウド時 代のソフトウェア開発にぴったり(のはず)
  16. 16. クラウド時代のドメイン駆動設計 • 「ドメイン駆動設計」はクラウド時代よりも前に、 クラウド未経験で書かれた • クラウド時代の開発経験、その成功と失敗か ら学んだ教訓をまとめた「続・ドメイン駆動設 計」が必要 • 現在、DDDコミュニティの一部は、「クラウド時 代のドメイン駆動設計」への挑戦と実験を盛 んに行っている
  17. 17. アーキテクチャの原理 • クラウド以前 – 同期・集中・直列 • クラウド時代 – 非同期・分散・並列
  18. 18. クラウド時代のドメイン駆動設計 挑戦キーワード • メッセージング • リアクティブ • EIP • CQRS • イベントソーシング • マイクロサービス …
  19. 19. クラウド時代の続・ドメイン駆動設計 • 前提:オブジェクト指向とエクストリームプログラミング ⇒ 引き続き有効 • 第1部 ドメインモデルを機能させる ⇒ 基本3原則は引き続き有効 • 第2部 モデル駆動設計の構成要素 ⇒ クラウド対応の構成要素が追加が必要 • 第3部 深いモデルの探求 ⇒ クラウド対応の章を、少なくともひとつ追加が必要 • 第4部 戦略的設計 ⇒ クラウド対応の章を、少なくともひとつ追加が必要
  20. 20. 第1部 ドメインモデルを機能させる • 三原則 – (ドメインの)膨大な知識をかみ砕きながら、深い モデルを探求する – 言葉を使った活発なコミュニケーションを通じてモ デルと設計を成長させる – 「モデル」と「実装の中核」は厳密に一致させる • クラウド時代でも有効だし大切な原則
  21. 21. 第2部 モデル駆動設計の構成要素 • 既存の構成要素(そのまま有効) – Entity, Value Object, Domain Service – Aggregate, Factory, Repository • 「メッセージング」や「リアクティブ」の考え方を 取り入れた構成要素の追加 – ドメインイベント – イベントヒストリー – 通知インタフェース …
  22. 22. 第3部 深いモデルの探求 新たな道具候補 • イベントとメッセージング – 利用者する人たちの「活動」を深く理解する道具 – 設計をしなやかにする道具(疎結合性の向上) • リアクティブ – 「状態」について深く理解するための道具 – 設計をしなやかにする道具 • 「状態」を扱うコードの安定性と変更容易性の向上 • 述語論理とパターンマッチング – 複雑なビジネスルールの構造の理解と表現の道具 – オブジェクト指向流の Specification パターンの改良 – ドメインサービスの実装方法の選択肢の追加
  23. 23. 第4部 戦略的設計 • クラウド時代で、ますます有用になる内容 – 第14章 モデルの整合性を維持する – 第15章 蒸留(コアドメイン) – 第16章 大規模な構造 – 第17章 戦略をまとめあげる • 追加が必要 – クラウド時代の大きな構造の実現手段の模索 – 例えば「Enterprise Integration Patterns」を、ドメイ ン駆動設計の文脈から読み解いた実践ガイド

×