Training‎ > ‎

DDD(Domain Driven Design) WorkShop

ドメイン駆動開発(DDD)パターン実践研修/演習

概要

ライフサイクルが長く発展的なシステムや、派生開発のベースになるソフトウェアに特に求められる品質属性として、再利用性や変更容易性があります。これまで、このような開発を対象として、ドメイン分析技術が研究され、一部の現場で実践されてきました。近年、オブジェクト指向の考え方は成熟期を迎え、柔軟性と堅牢性に配慮したシステム開発も一般的に行われるようになりました。同時に、「ドメイン」という言葉も様々に定義され、また解釈を受け、オブジェクト指向をベースとした、ドメイン駆動開発(DDD)という一つの形にまとめ上げられました(初出2003年)。
 DDDは、顧客が持つ知識の普遍的な部分と今後のビジネス変化への対応し、ソフトウェアの普遍的な部分と柔軟な部分へマッピングさせる、様々なソフトウェア技術や経験則を駆使していく考え方を提供します。本講座は、難解で理解しにくいDDDの全体像を、既存の開発用語で平易に示すと共に、DDDで扱われる様々なパターンを駆使した演習を中心に実施します(ICONIXによるモデリングを合わせて行います)。これにより、ドメインモデリングのスキルを効率的に獲得し、現場の開発への適用をスムーズに行えることが可能となります。また、「エンタープライズ アプリケーション アーキテクチャ パターン」と合わせて、現場で実践することにより、業務システム全体のプラットフォーム化と開発の効率化に寄与することができます。

目標

  1. これまでの設計/開発手法とDDDの考え方の違いを知ることができる
  2. DDD手法の一部を、要件分析/アーキテクチャ設計/テスト工程に組み込むことができる

対象者

  • オブジェクト指向による開発経験(3年以上)
    • アーキテクチャパターンおよびデザインパターンの適用経験
    • フレームワーク設計経験、開発現場展開経験
    • プロジェクトリーダ経験(5名体制以上)
  • データベース論理/物理設計経験(3年以上)
  • オブジェクト指向技術を網羅的・実践的に学びたい方

研修内容

 DDDで取り扱うパターンを網羅して理解できるよう、適宜演習(モデリングおよびディスカッション)を実施いたします。(2日間)

【目次
  1. ドメイン駆動設計とは?
  2. DDDによる開発ライフサイクル
  3. パターンの関係
  4. DDDの構成
    1. コミュニケーションと言語
    2. 基本技術:構成要素
    3. リファクタリング:しなやかな設計
    4. 設計戦略:コンテキスト
    5. 設計戦略:蒸留
    6. 設計戦略:大規模な構造
  5. いろいろなパターン
  6. 現状の開発へDDDを導入するには?
    1. DDDが有効/無効な開発とは?
    2. DDDを前提とした開発計画(体制、WBS)の立案
    3. 開発リーダおよびアーキテクトの心構え
  7. まとめ
  8. 【演習
    1. 知識の確認
    2. 責務関係のモデリング
    3. インテリア企業の事例
    4. 会議室予約システムの事例
    5. レンタルビデオ店の事例
    6. WebBookStore(オンライン書籍販売サイト)の事例
    7. イベント企画企業の事例
    8. 旅行会社の事例
    9. 銀行与信システムの事例
【取り上げるパターン(42)】
  • コミュニケーションと言語
    • ユビキタス言語-UBIQUITOUS LANGUAGE
    • モデル駆動設計-MODEL-DRIVEN DESIGN
    • 実践的モデラ-HANDS ON MODELERS
  • 基本技術:構成要素
    • レイヤ化アーキテクチャ-LAYERED ARCHITECTURE
    • 利口なUI「アンチパターン」-SMART UI “ANTI-PATTERN”
    • エンティティ-ENTITIES(別名 参照オブジェクト-REFERENCE OBJECTS)
    • 値オブジェクト-VALUE OBJECTS
    • サービス-SERVICES
    • モジュール-MODULES-別名 パッケージ-PACKAGES
    • 集約-AGGREGATES
    • ファクトリ-FACTORIES
    • リポジトリ-REPOSITORIES
  • リファクタリング:しなやかな設計
    • 仕様-SPECIFICATION
    • 意図の明白なインタフェース-INTENTION-REVEALING INTERFACES
    • 副作用のない関数-SIDE-EFFECT-FREE-FUNCTIONS
    • 表明-ASSERTIONS
    • 概念の輪郭-CONCEPTUAL CONTOURS
    • 独立したクラス-STANDALONE CLASSES
    • 閉じた操作-CLOSURE OF OPERATIONS
    • 宣言的スタイル-DECLARATIVE DESIGN
  • 設計戦略:コンテキスト
    • 境界づけられたコンテキスト-BOUNDED CONTEXT
    • 継続的な統合-CONTINUOUS INTEGRATION
    • コンテキストマップ-CONTEXT MAP
    • 共有カーネル-SHARED KARNEL
    • 顧客/供給者の開発チーム-CUSTOMER/SUPPLIER DEVELOPMENT TEAMS
    • 順応者-CONFORMIST
    • 腐敗防止層-ANTICORRUPTION LAYER
    • 別々の道-SEPARATE WAYS
    • 公開ホストサービス-OPEN HOST SERVICE
    • 公表された言語-PUBLISHED LANGUAGE
  • 設計戦略:蒸留
    • コアドメイン-CORE DOMAIN
    • 汎用サブドメイン-GENERIC SUBDOMAINS
    • ドメインビジョン声明文-DOMAIN VISION STATEMENT
    • 強調されたコア-HIGHLIGHTED CORE
    • 凝集されたメカニズム-COHESIVE MECHANISMS
    • 隔離されたコア-SEGREGATED CORE
    • 抽象化されたコア-ABSTRACT CORE
  • 設計戦略:大規模な構造
    • 進化する秩序-EVOLVING ORDER
    • システムのメタファ-SYSTEM METAPHOR
    • 責務のレイヤ-RESPONSIBILITY LAYERS
    • 知識レベル-KNOWLEDGE LEVEL
    • 着脱可能コンポーネントのフレームワーク-PLUGGABLE COMPONENT FRAMEWORK
【補足的に参照するパターン:GRASP(General Responsibility Assignment Software Pattern / 汎用責務割り当てソフトウェアパターン)】
  1. 情報エキスパート-Information Expert
  2. 生成者-Creator
  3. コントローラ-Controller
  4. 疎結合性-Low Coupling
  5. 高凝集性-High Cohesion
  6. 多相性-Polymorphism
  7. 純粋架空物-Pure Fabrication
  8. 間接化-Indirection
  9. バリエーション防護-Protected Variations
【その他、補足的に参照するパターン】
  1. アナリシスパターン(Analysis Pattern by Martin Fowler)
  2. 実装パターン、イディオム(Implementation Patterns by Kent Beck / Idioms)
  3. リファクタリングパターン(Refactoring  by Martin Fowler, Refactoring to Pattern by Joshua Kerievsky)
  4. ソースコード改善パターン(Working Effectively with Legacy Code by Michael Feathers)
  5. エンタープライズ アプリケーション アーキテクチャ パターン(PofEAA by Martin Fowler