2013-04-16 9 views
6

私はドメイン駆動型設計とテスト駆動型開発の両方を使用してプロジェクトを進めています。エバンスによるDDDの本を読んでいるうちに、私は彼がドメイン内の集約的なルートのためのインターフェースを定義していないことに気付きました。集約ルートがドメイン駆動型設計でインターフェイスを実装する必要があります

私がDDDとTDDの両方を行っている場合、集約ルートクラスを簡単にテスト可能でモック可能にするために、各集約ルートのインターフェイスを定義する必要がありますか?その場合は、集約ルートに含まれる各エンティティのインタフェースも定義する必要がありますか?

私はGoogleとStackOverflowでの検索から、私が探しているものに近い答えを見つけましたが、私はDDDとTDDの両方を行うときにアドバイスを探しています。私がこれまで見てきた答えでは、TDDをやっていることが見逃されるかもしれません。

+0

これは広い質問です。より具体的な回答を得るための建物の例を挙げることができます。それはあなたが 'それは依存している'回答をたくさん得ているかもしれません。 –

+1

ハブソン、私は質問の広さについてお詫び申し上げます。明確にするために、Evansが意図的に例を単純に保つ(すなわち、TDDのような側面を本のトピック外に無視する)、または彼はTDDを行っている時でさえも追加の価値を提供していないので、それらを除外しました。問題の例は、刊行物「ドメイン駆動設計」の例として使用されている貨物アプリケーションEvansです。これが質問の範囲を狭めるのに役立つことを願っています。フィードバックをお寄せいただきありがとうございます。 –

+0

謝罪は必要ありません。それが具体的になります。私が学んだことをちょうど渡します。人々はこの種の質問を愛しています。ここにいるのはコード/アーキテクチャーのダイアグラムです。 –

答えて

4

いいえ、凝集体に対して直接試験してください。集約自体には依存関係が組み込まれてはいけません。特定の動作に依存関係が必要な場合は、通常はインタフェースとして表現する必要があります。集合体上のインタフェースは、不必要な抽象化(動作の実装は1つだけです)がポイントです。また、BDD and DDDを見てください。Behavior-Driven Developmentは、TDDの進化として見ることができ、DDDとうまく対応します。

+0

私たちは不必要な抽象化の意味について話すことができますか? http://chat.stackoverflow.com/rooms/28305/domain-driven-design –

+0

私はそれを撃つ、同じ時間に乗ることが難しいかもしれない.. – eulerfx

+1

私はかなり多くの研究を行った私は2日前にこの質問を投稿しました。私が学んだのは、すべてのドメインエンティティ(集約ルーツを含む)のインターフェイスを作成することの問題は、(TDDやDDDを考慮しなくても)大きく大きく議論されているトピックであるということです。それを考えると、私は明確な解答ではないと思っています。だから私はエバンスがあなたが述べた理由のために集団の根のために意図的にインターフェースを除外したと仮定しなければならない。したがって、私はこのアプローチで前進し、それがどのように進むかを見ていきます。あなたのフィードバックに感謝します! –

3

ドメインを使用するクライアントのテストを容易にするために、interfaces for all entities and domain servicesを定義するのに使用されています。さらに、そのようなアプローチは、必要に応じてAOPを容易にする。

値オブジェクトは、それに依存します。例えば、私はイベント引数のためのインタフェース、identifiersexceptions(明らかに)と他の種類の "契約"を使用しません。しかし、私はクライアントコードテストの分離を容易にするためにインターフェイスを導入しなければなりませんでした。したがって、私の経験則は、クライアントが希望の状態で値オブジェクトを取得するために必要なステップの数です。それが複数の場合(または2つの場合、良い意味は私の友人である - D)、私は最初からインターフェースを導入します。

私の集計はすべてエンティティであるため、集計については言及していません。

関連する問題