DDD WorkShop
ドメイン駆動開発(DDD:Domain Driven Design)パターン実践研修/演習
概要
ライフサイクルが長く発展的なシステムや、派生開発のベースになるソフトウェアに特に求められる品質属性として、再利用性や変更容易性があります。これまで、このような開発を対象として、ドメイン分析技術が研究され、一部の現場で実践されてきました。近年、オブジェクト指向の考え方は成熟期を迎え、柔軟性と堅牢性に配慮したシステム開発も一般的に行われるようになりました。同時に、「ドメイン」という言葉も様々に定義され、また解釈を受け、オブジェクト指向をベースとした、ドメイン駆動開発(DDD)という一つの形にまとめ上げられました(初出2003年)。
DDDは、顧客が持つ知識の普遍的な部分と今後のビジネス変化への対応し、ソフトウェアの普遍的な部分と柔軟な部分へマッピングさせる、様々なソフトウェア技術や経験則を駆使していく考え方を提供します。本講座は、難解で理解しにくいDDDの全体像を、既存の開発用語で平易に示すと共に、DDDで扱われる様々なパターンを駆使した演習を中心に実施します(ICONIXによるモデリングを合わせて行います)。これにより、ドメインモデリングのスキルを効率的に獲得し、現場の開発への適用をスムーズに行えることが可能となります。また、「エンタープライズ アプリケーション アーキテクチャ パターン」と合わせて、現場で実践することにより、業務システム全体のプラットフォーム化と開発の効率化に寄与することができます。
目標
これまでの設計/開発手法とDDDの考え方の違いを知ることができる
DDD手法の一部を、要件分析/アーキテクチャ設計/テスト工程に組み込むことができる
対象者
オブジェクト指向による開発経験(3年以上)
アーキテクチャパターンおよびデザインパターンの適用経験
フレームワーク設計経験、開発現場展開経験
プロジェクトリーダ経験(5名体制以上)
データベース論理/物理設計経験(3年以上)
オブジェクト指向技術を網羅的・実践的に学びたい方
研修内容
DDDで取り扱うパターンを網羅して理解できるよう、適宜演習(モデリングおよびディスカッション)を実施いたします。(2日間)
【目次】
ドメイン駆動設計とは?
DDDによる開発ライフサイクル
パターンの関係
DDDの構成
コミュニケーションと言語
基本技術:構成要素
リファクタリング:しなやかな設計
設計戦略:コンテキスト
設計戦略:蒸留
設計戦略:大規模な構造
いろいろなパターン
現状の開発へDDDを導入するには?
DDDが有効/無効な開発とは?
DDDを前提とした開発計画(体制、WBS)の立案
開発リーダおよびアーキテクトの心構え
まとめ
【演習】
知識の確認
責務関係のモデリング
インテリア企業の事例
会議室予約システムの事例
レンタルビデオ店の事例
WebBookStore(オンライン書籍販売サイト)の事例
イベント企画企業の事例
旅行会社の事例
銀行与信システムの事例
【取り上げるパターン(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 / 汎用責務割り当てソフトウェアパターン)】
情報エキスパート-Information Expert
生成者-Creator
コントローラ-Controller
疎結合性-Low Coupling
高凝集性-High Cohesion
多相性-Polymorphism
純粋架空物-Pure Fabrication
間接化-Indirection
バリエーション防護-Protected Variations
【その他、補足的に参照するパターン】
アナリシスパターン(Analysis Pattern by Martin Fowler)
実装パターン、イディオム(Implementation Patterns by Kent Beck / Idioms)
リファクタリングパターン(Refactoring by Martin Fowler, Refactoring to Pattern by Joshua Kerievsky)
ソースコード改善パターン(Working Effectively with Legacy Code by Michael Feathers)
エンタープライズ アプリケーション アーキテクチャ パターン(PofEAA by Martin Fowler)