ソフトウェア開発
中心となる活動
開発プロセス
要求
アーキテクチャ
設計
エンジニアリング
実装
テスト
デバッグ
デプロイメント
メンテナンス
パラダイムとモデル
アジャイル
クリーンルーム
反復
ソフトウェアプロトタイピング
スパイラル
Vモデル
ウォーターフォール
方法論とフレームワーク
ASD
ドメイン駆動設計(ドメインくどうせっけい、英語: domain-driven design、DDD)とは、ドメインの専門家からの入力に従ってドメインに一致するようにソフトウェアをモデル化することに焦点を当てるソフトウェア設計手法である[1][2]。オブジェクト指向プログラミングに関しては、ソースコード(クラス名・クラスメソッド・クラス変数)の構造と名称がビジネスドメインと一致させる必要があることを意味する。例えばローンの申し込みを処理するソフトウェアには、LoanApplicationやCustomerなどのクラスと、AcceptOfferやWithdrawどのメソッドが含まれることになる。ドメイン駆動設計は次の目標に基づいている。
プロジェクトの主な焦点をコアドメインとドメインロジックに置く。
ドメインのモデルに基づく複雑な設計。
特定のドメインの問題に対処する概念モデルを繰り返し改良するために、技術とドメインの専門家の間で創造的なコラボレーションを開始する。
ドメイン駆動設計では、開発者は通常モデルを純粋で有用な構造として維持するために大量の分離とカプセル化を実装する必要があると批判されているが、ドメイン駆動型設計は保守性などの利点を提供する。一方でMicrosoftは、モデルがドメインの共通理解を策定する上で明確な利点を提供する複雑なドメインにのみ推奨している。この名称は、Eric Evansが著作Domain-Driven Design: Tackling Complexity in the Heart of Softwareで用いた[3]。 ドメイン駆動型設計は、多くの高レベルの概念と実践を明確に示している[3]。最も重要なのはドメインであり、ユーザーがプログラムを適用するサブジェクト領域は、ソフトウェアのドメインである。ソフトウェアのドメインは、そのコンテキスト、つまり、その意味を決定する単語またはステートメントが表示される設定を管理する。このことから、開発者はドメインモデルを構築する。これは、ドメインの選択された側面を記述し、そのドメインに関連する問題を解決するために使用できる抽象化のシステムである。ドメイン駆動設計のこれらの側面は、ユビキタス言語を促進することを目的としている。つまり、ドメインモデルは、システム要件、ビジネスユーザー、スポンサー、および開発者を記述するためにドメインの専門家によって共有されるcommon language(共通言語)を形成するべきである、という考えである[3]。ドメイン駆動設計では、ドメイン層
概要