1. ホーム
  2. domain-driven-design

[解決済み】ドメイン駆動設計(DDD)とは何ですか?) [クローズド]

2022-03-30 05:38:58

質問

DDD(Domain Driven Design)がよく使われているのを見かけますが、WikipediaのDDDに関する項目を読んでも、それが実際に何なのか、自分のサイト作りにどのように導入すればいいのか、まだよくわかりません。

どのように解決するのですか?

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

あなたがまだこの時点で読んでいると仮定して、DDDについての私の考えはこうです。

DDDは、ソフトウェアを現実のシステムやプロセスのモデルにしようとするものです。 DDDを使用する際、あなたは以下のような人と密接に仕事をすることを意図しています。 ドメインエキスパート 現実のシステムがどのように機能するかを説明できる人。 例えば、競馬に賭けるシステムを開発する場合、専門家は経験豊富なブックメーカーになるかもしれません。

自分自身とドメインの専門家の間で ユビキタス言語 (UL)とは、基本的にシステムの概念的な記述です。システムが行うことを、ドメインの専門家が読んで正しいかどうか検証できるような方法で書き表すべきだということです。 賭けの例では、ユビキタス言語には「レース」「ベット」「オッズ」などの言葉の定義が含まれるでしょう。

ULで記述されたコンセプトは、オブジェクト指向設計の基礎を形成することになります。 DDDは、オブジェクトがどのように相互作用すべきかという明確なガイダンスを提供し、オブジェクトを以下のカテゴリーに分割するのに役立ちます。

  • 値オブジェクト:サブパーツを持つ可能性のある値を表します(例えば、日付は日、月、年を持つ可能性があります)。
  • エンティティとは、以下のようなオブジェクトです。 アイデンティティ . たとえば、Customer オブジェクトはそれぞれ独自の ID を持っているので、同じ名前の 2 人の顧客は同じ顧客ではないことがわかります。
  • 集約ルートとは、他のオブジェクトを所有するオブジェクトのことです。 これは複雑な概念で、所有者がいなければ意味をなさないオブジェクトがあることを前提に動いています。 例えば、'Order Line' オブジェクトは、所属する 'Order' がなければ意味をなさないので、Order は集約ルートであり、Order Line オブジェクトは Order オブジェクトのメソッドを通してのみ操作することができる、と言っています。

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

  • リポジトリ 永続化(データの保存と読み込み、通常はデータベースとの間)のためのパターンです。
  • 工場 オブジェクト生成のためのパターン
  • サービス:メインドメインのオブジェクトを操作するオブジェクトを、ドメインの一部にならずに作成するためのパターン

さて、この時点で、もしあなたがこれらのことを聞いたことがないのであれば、締め切りのあるプロジェクトでDDDを使おうとはしないほうがいいと言わざるを得ません。 DDDに挑戦する前に、次のことをよく理解しておく必要があります。 デザインパターン エンタープライズデザインパターン . これらを知ることで、DDDをより理解しやすくなります。 また、前述したように DDDの無料紹介 InfoQから入手可能です(DDDについての講演もあります)。