🦔

DDD(ドメイン駆動設計(Domain-Driven Design))???

2023/04/08に公開

ドメイン駆動設計がいまいちよく分かっていないので、この場をお借りして更新していこうの会。

DDDとは、ドメイン駆動設計(Domain-Driven Design)の略称です。DDDは、ソフトウェアの開発において、ドメイン(業務領域)を中心として設計を行う手法です。ソフトウェアが扱う問題領域を深く理解し、それを適切に表現するために、ドメインモデルを作成することが重視されます。また、DDDは、ソフトウェア開発におけるコミュニケーションやチームのコラボレーションにも役立つとされています。DDDはエリック・エヴァンスによって提唱され、その思想や手法は多くの開発者によって支持されています。

細かくすると、、、
ドメインとは:
インターネット上の特定のウェブサイトやメールサーバーなどの場所
例えば、www.example.comというドメイン名の場合、.comがトップレベルドメインであり、exampleがセカンドレベルドメインです。ウェブサイトを作成する場合には、ドメイン名を登録する必要があります。

駆動とは:
ソフトウェアの設計や開発において、ビジネスドメイン(例えば、銀行業務、ECサイト、ゲームなどの業界や分野)が主導的な役割を果たすということです。つまり、ソフトウェアがビジネスの問題を解決するために、ビジネスドメインに関する知識やプロセスを正確に把握し、それをもとにモデル化を行うことが求められます。

具体的には、ビジネスドメインに関する概念やルール、プロセスなどを、ドメインモデルとして表現します。そして、このドメインモデルがソフトウェアの設計や実装において駆動的な役割を果たすことが重要です。つまり、ビジネスドメインがソフトウェアの設計や開発を主導することで、よりビジネス要件を満たし、柔軟で拡張性の高いソフトウェアを実現することができるのです。

例えば、ECサイトを開発する場合には、商品や顧客、注文などのビジネスドメインに関する知識を正確に把握し、それをもとにモデル化(複雑な現実世界を抽象化し、簡潔に表現することで理解しやすくする手法)することが求められます。そして、このドメインモデルがソフトウェアの設計や実装において駆動的な役割を果たし、ECサイトの要件を正確に反映したソフトウェアを実現することができるのです。

設計とは:
あるシステムや製品などを実現するために、必要な要素や構成、機能、性能、品質などを定める作業のことを指します。設計には、様々な分野で用いられ、製品やシステムの開発において欠かせない工程の一つです。

設計には、概念設計、詳細設計、実装設計など、様々なレベルがあります。概念設計は、要件定義の段階で行われ、何を作るか、何を実現するかを決定する作業です。詳細設計は、概念設計で決定されたシステムの構成や機能、性能などをより具体的に詳細化し、システムの全体像を明確にします。そして、実装設計は、詳細設計を元に、実際にシステムを実現するために必要なコードやアルゴリズム、データ構造などを設計する作業です。

設計には、要件定義やモデリング、プロトタイピング、評価検証などの手法があります。これらの手法を適切に活用することで、製品やシステムを効率的かつ正確に設計することができます。また、設計にはユーザーのニーズや視点を常に意識することも重要です。製品やシステムを利用するユーザーの視点から、使いやすさや安全性などを考慮して設計することが、より良い製品やシステムを実現するために欠かせない要素となります。

つまり。
「ビジネスの本質を的確に捉えたモデルを基に、高品質なソフトウェアを設計する手法」
ということでしょうか。

なぜDDDが生まれたのか

DDDはビジネスドメインの複雑さに対応するために生まれました。過去のソフトウェア開発において、ビジネスドメインを正確にモデル化し、それに基づいて高品質なソフトウェアを設計することが難しく、コストや品質の問題が生じることがありました。

ドメイン駆動設計は、このような問題を解決するために、ビジネスドメインの専門知識を備えたドメインエキスパートと、それを正確にモデル化し、高品質なソフトウェアを実現するための技術を持つソフトウェアエンジニアが協力して開発を進める手法として考案されました。

DDDが向いているプロジェクト、向いていないプロジェクト

ビジネスロジックが複雑なプロジェクトや大規模なシステム開発プロジェクトに特に向いています。複雑な業務プロセスやビジネスルールを持つプロジェクトでは、ビジネスドメインを正確に把握し、それをモデル化することで、開発者がシステムの要件を正確に理解し、ビジネス要件を効果的に実現することができます。

一方、小規模で単純なシステム開発プロジェクトには、DDDの適用は必ずしも適切ではありません。このようなプロジェクトでは、より単純で直感的な設計手法やアーキテクチャが有効である場合があります。

更新予定あり。

Discussion