ドメイン駆動設計(DDD)とは何ですか?[閉まっている]


276

記事でDDD(ドメイン駆動設計)が頻繁に使用されるのを見続けています。DDDに関するWikipediaのエントリを読みましたが、それが実際に何であり、自分のサイトの作成に実装する方法を理解できません。

回答:


595

まず、それが必要であることを知らない場合は、それを必要としない可能性があります。DDDが解決する問題を認識しない場合は、おそらくそれらの問題はありません。DDDの支持者でさえ、DDDは大規模な(> 6か月)プロジェクトのみを対象としていることを頻繁に指摘します。

この時点でまだ読んでいると仮定すると、DDDに対する私の見解は次のとおりです。

DDDは、ソフトウェアを実際のシステムまたはプロセスのモデルにしようとするものです。DDDを使用する場合、ドメインの専門家と緊密に連携することを目的としています、実際のシステムがどのように機能するかを説明できる。たとえば、競馬への賭けを処理するシステムを開発している場合、ドメインの専門家は経験豊富なブックメーカーである可能性があります。

自分とドメインエキスパートの間で、ユビキタス言語(UL)を構築します。ULは基本的にシステムの概念的な説明です。ドメインの専門家が読み取って正しいことを確認できるように、システムの動作を書き留めることができるはずです。私たちの賭けの例では、ユビキタス言語には「人種」、「賭け」、「オッズ」などの単語の定義が含まれます。

ULによって記述された概念は、オブジェクト指向設計の基礎を形成します。DDDは、オブジェクトの相互作用方法に関する明確なガイダンスを提供し、オブジェクトを次のカテゴリに分類するのに役立ちます。

  • 値オブジェクト。サブパートを持つ可能性のある値を表します(たとえば、日付には日、月、年がある場合があります)
  • エンティティ。アイデンティティを持つオブジェクトです。たとえば、各Customerオブジェクトには独自のIDがあるため、同じ名前の2人の顧客は同じ顧客ではないことがわかります
  • 集合ルートは、他のオブジェクトを所有するオブジェクトです。これは複雑な概念であり、所有者がいないと意味をなさないオブジェクトがいくつかあることに基づいて機能します。たとえば、「Order」オブジェクトは、「Order」が属していないと意味がありません。そのため、Orderは集約ルートであり、Order Lineオブジェクトは、Orderオブジェクトのメソッドを介してのみ操作できます。

DDDは、いくつかのパターンも推奨しています。

  • リポジトリ、持続性のパターン(通常はデータベースとの間でデータを保存およびロードする)
  • Factory、オブジェクト作成のパターン
  • サービス、ドメイン自体の一部ではなくメインドメインオブジェクトを操作するオブジェクトを作成するためのパターン

さて、この時点で私は、これらのことをこれまで聞いたことがない場合は、期限のあるプロジェクトでDDDを使用するべきではないと言っておかなければなりません。DDDを試す前に、設計パターンエンタープライズ設計パターンに精通している必要があります。これらを知っていると、DDDが非常にわかりやすくなります。そして、前述のように、InfoQから入手できるDDDの無料の紹介があります(DDDについての講演もあります)。


33
うわー...なんて素晴らしい返事だ!とても感謝していて、私が1マイルでもどこでも読んだ最良の説明。ありがとう..その本は明日ダウンロードします。
leen3o 2009

3
「集合ルートは、他のオブジェクトを所有するオブジェクトです。これは複雑な概念であり、所有者がいないと意味のないオブジェクトがいくつかあることに基づいて機能します。」ここで誤解されていると思うかもしれません。 Aggregateは、トランザクションの境界に関係していますが、すべてのビジネスインバリアントルールをここで適用する必要があります。
super1ha1 2017年

6
正直なところ、これは、開発者が1か月以上にわたってアーキテクトと共同作業するほとんどすべてのプロジェクトのように聞こえます。(まあ、少なくとも私の経験によると)どの実現が私にあなたの答えをさらに感謝させます。:)
JaroslavZáruba2017年

4
DDDは「大規模なプロジェクトのみを対象としている」という記述には同意しません。DDDは、完全に実行する必要があるか、まったく実行しない必要があるものではありません。DDDからいくつかのプラクティスを実行できます。たとえば、「値オブジェクト」と「ユビキタス言語」を実行するだけで、小さなプロジェクトでルートを集約することはできません。
EasterBunnyBugSmasher 2017

6
ところで、私たちが行うすべてのプロジェクトやモデル化について、ドメイン分析を行うわけではありません。プロジェクトのドメインと範囲を理解するために、顧客やSMEとのBAとしての会話を終えたことはありませんか?DDDで他に並ぶもののない他のソフトウェア開発プロジェクトの何が並外れて傑出しているのかまだ理解できませんか?
超新星

50

例としてStackOverflowを取り上げます。いくつかのWebフォームの設計を開始する代わりに、まず、ユーザー、質問、回答、投票、コメントなど、問題ドメイン内のエンティティのオブジェクト指向モデリングを行うことに集中します。設計は問題の詳細に基づいているため、ドメインはドメイン駆動設計と呼ばれます

エリック・エバンスの本でもっと読むことができます。


5
無料で入手できる Eric Evansの本の短縮版があります
troelskn 2009

問題は、彼らがウェブページを使用して結びつく前に彼らが有用な何かを彼らが言うことができるのに十分な方法でドメインを理解する誰かを必要とすることです!これが事実であるとき、素晴らしい!
Ian Ringrose

3
しかし、正直なところ、誰がフォームのデザインから始めますか?立派なアカデミックコースは、ビジネス要件に応じて分析、設計、モデリングのアプリケーションを通過します。このテクニックの新機能がまったくわからない。
セバス

6
私も、これは単にオブジェクト指向デザインであり、このコンセプトが登場する前から、誰もが使用していました。ここには新しい発明はありません。
Ronen Festinger 2017

2
@RonenFestingerは、この回答だけでDDDを判断しないでください。Eric Evansの本には多くの洞察があります。たとえば、境界コンテキスト。制限付きコンテキストパラダイムは、今日構築しているマイクロサービスの柱の1つです。本を読むことは、マイクロサービスの理解にも役立ちます。
Kerem Baydo Bayan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.