Domain-Driven Design: Tackling Complexity in the Heart of Software

Domain-Driven Design: Tackling Complexity in the Heart of Software (English Edition)

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

2011年発売

目次

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

ドメイン駆動設計におけるモデルの有用性

ソフトウェアの核心

第1章 知識をかみ砕く

効果的なモデリングの要素

知識のかみ砕き

継続的学習

知識豊富な設計

例1.1——隠された概念を引き出す

深いモデル

第2章 コミュニケーションと言語の使い方

ユビキタス言語(UBIQUITOUS LANGUAGE)

例2.1——貨物輸送プログラムを完成させる

声に出してモデリングする

1つのチームに1つの言語

ドキュメントと図

書かれた設計ドキュメント

実行可能な基盤

説明のためのモデル

例2.2——輸送業務と経路

第3章 モデルと実装を結びつける

モデル駆動設計(MODEL-DRIVEN DESIGN)

モデリングパラダイムとツールによるサポート

例3.1——手続き型からモデル駆動へ

骨格を見せる:なぜモデルがユーザにとって重要なのか?

実践的モデラ(HANDS ON MODELERS)

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

第4章 ドメインを隔離する

レイヤ化アーキテクチャ(LAYERED ARCHITECTURE)

例4.1——オンラインバンキングの機能をレイヤに分割する

レイヤを関係づける

アーキテクチャフレームワーク

ドメイン層はモデルが息づく場所

利口なUI「アンチパターン」(SMART UI メANTI-PATTERNモ)

その他の隔離

第5章 ソフトウェアで表現されたモデル

関連

例5.1——証券取引口座における関連

エンティティ(ENTITIES)(別名 参照オブジェクト(REFERENCE OBJECTS))

エンティティをモデル化する

同一性のための操作を設計する

値オブジェクト(VALUE OBJECTS)

値オブジェクトを設計する

例5.2——値オブジェクトを使ってデータベースをチューニングする

値オブジェクトを含む関連を設計する

サービス(SERVICES)

サービスと隔離されたドメイン層

粒度

サービスへのアクセス

モジュール(MODULES)(別名 パッケージ(PACKAGES))

アジャイルモジュール

例5.3——Javaにおけるパッケージのコーディング規約

インフラストラクチャ駆動パッケージングの落とし穴

モデリングパラダイム

なぜオブジェクトパラダイムが主流なのか?

オブジェクトの世界におけるオブジェクトではないもの

パラダイムを混在させる際にはモデル駆動設計に忠実であること

第6章 ドメインオブジェクトのライフサイクル

集約(AGGREGATES)

例6.1——購入注文の整合性

ファクトリ(FACTORIES)

ファクトリとその場所を選択する

コンストラクタがあればよい場合

インタフェースを設計する

不変条件のロジックはどこへ置くべきか?

エンティティファクトリ対値オブジェクトファクトリ

格納したオブジェクトを再構成する

リポジトリ(REPOSITORIES)

リポジトリに対して問い合わせる

クライアントのコードはリポジトリの実装を無視するが、開発者はそうではない

リポジトリを実装する

フレームワークの範囲内で作業する

ファクトリとの関係

関係データベースに合わせてオブジェクトを設計する

第7章 言語を使用する:応用例

貨物輸送システムを導入する

ドメインを隔離する:アプリケーションの導入

エンティティと値オブジェクトを区別する

役割とその他の属性

輸送ドメインの関連を設計する

集約の境界

リポジトリを選択する

シナリオをウォークスルーする

サンプルアプリケーションの機能:貨物の荷出し地を変更する

サンプルアプリケーションの機能:リピータへの対応

オブジェクトの生成

貨物用のファクトリとコンストラクタ 荷役イベントを追加する

リファクタリングのために立ち止まる:貨物集約についてのもう1つの設計

輸送モデルにおけるモジュール

新機能を導入する:配分チェック

2つのシステムを接続する

モデルを強化する:ビジネスのセグメント化

パフォーマンスチューニング

最後に

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

リファクタリングのレベル

深いモデル

深いモデル/しなやかな設計

発見のプロセス

第8章 ブレイクスルー

ブレイクスルーの話

悪くないモデルなのだが…

ブレイクスルー

さらに深いモデル

冷静な意思決定

結末

好機

基本への集中

エピローグ:新しい洞察の連鎖

第9章 暗黙的な概念を明示的にする

概念を掘り出す

言葉に耳を傾ける

ぎこちなさを精査する

文献を読む

何度でも挑戦すること

それほど明白でない概念をモデル化する方法

明示的な制約

ドメインオブジェクトとしてのプロセス

仕様(SPECIFICATION)

仕様の適用と実装

第10章 しなやかな設計

第11章 アナリシスパターンを適用する

第12章 デザインパターンをモデルに関係づける

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

第4部 戦略的設計

結論

エピローグ

展望

付録

用語解説

参考文献

索引