2009-07-21 16 views
15

私は最近、私の注意を引いた "The Anemic Domain Model Pattern"の投稿を読んでいます。これを読んで、私は貧血ドメインモデルの記述が私が取り組んだ多くのプロジェクトに適用されていることを発見しました。私はこれが非常に自然な感じのデザインデザインとして悪いとは考えていませんでした。私は、domain modelが軽量であまり複雑ではない場合、貧血ドメインモデルのモニカがかなりよくフィットすると考えました。なぜ "Anemic Domain Model"のタイトルがあなたのコードを適切に記述していないようにする必要がないドメインモデルに複雑性を追加するのですか?単純ドメイン駆動型デザインの貧血モデルとドメインモデル

質問:あなたのコード/サービス層の複雑さをさらに詰め込むと、エンティティオブジェクトの複雑さが晒されることになるのは間違いありません。私はEntityで内部的にTotalの値を把握できる「Total」プロパティを持っているためです。私はエンティティが他のさまざまなウィジェットと直接通信して、そのプロパティの1つの結果を判断するのではありません。貧血ドメインモデルのコンセプトは、アンチパターンか懸念の良い分離ですか?タイトルの貧血ドメインモデルは常に悪いことですか?

このデザイン(反)パターンに他の人々の考えがあったのはちょっと不思議です。

答えて

9

は重要な問題は、ドメインモデルが貧血である理由を依頼することですか?

  • ほぼ完全主CRUD screensの集合であるアプリケーションのようなビジネスロジックが存在しませんか、?
  • 「ドメインオブジェクト」が実際にはサービス指向アーキテクチャー シンプルな構造 data transfer objects
  • リファクタリングを過度に妨げるコードの所有権や前方/後方互換性などの政治的または現実的な考慮事項はありますか?
  • その他のオブジェクト指向言語で手続き型/リレーショナル型の設計を適用しますか?

いずれの場合でも、ドメインモデルロジックとサービスロジックの境界について簡単な経験則を選択すると、関連オブジェクトとのやりとりがドメイン内でうまくいくことになります。おそらくドメインモデルに属していないかもしれません(ユーザーインターフェイス、Webサービスなど)。

+0

私のすべてのビジネスルールがサービスクラスに含まれていても、Webサービスではない(と私は全くWebサービスを使用していません) – Omu

+0

@Omu私はArch SOAを呼び出すことはできますか?その普通の手続き型/リレーショナルコードと呼ばれる傾向があります。 SOAは手続き型スタイルで記述するための動機であり、記述ではありません。 –

7

ドメインが軽量(読み取り:複雑ではない)の場合は、コアドメイン層に単純なActiveRecordタイプのオブジェクトを使用することをお勧めします。通常はDBテーブルとドメインオブジェクトの間に1対1のマッピングがありますが、ここには「論理」がたくさんありません。あなたのアプリは、データベースとあなたのUIの間でレコードをシャッフルするだけで、簡単なCRUD操作が可能です。

複雑なドメインの場合、一部のオブジェクトがDBテーブルへのマッピングを終了するコア・ドメイン・モデルを構築し、プレーン・データだけでなくドメイン内の他の概念を表現しない可能性があります。アプリケーションのロジックは、適切な場合はオブジェクト内部に、複数のドメインオブジェクト間の調整が必要な場合はServiceオブジェクト内に配置する必要があります。

貧血ドメインモデルのアンチパターンは、複雑なドメインを持つ場合に適用されますが、ドメインオブジェクトにいくつかのロジックを適切に配置し、サービス内のロジックを適切に配置するのではなく、ドメインオブジェクト。

ここで重要な違いは、ロジックを配置する場所です。あまり持っていなければ、明らかにドメインオブジェクトは単純なデータコンテナのように見えます。複雑なロジックがある場合は、ドメインオブジェクトからすべてを取り出すのではなく、コアドメインオブジェクトとドメインサービスの間で適切に分離してください。

+0

これは最高の*シンプルな説明です。これは初心者の開発者にADMに関するこの誇大宣伝が本当に何であるかを伝えています。ありがとうございます。 – Heliac

1

G'day!

ロジックをドメインオブジェクトの外に置くと、カプセル化(またはデータ隠蔽)という主要なオブジェクト指向の概念の1つが完全に失われます。

AOPはある程度まではなりますが、結局のところ、オブジェクト指向の重要なコンセットの1つはなくなりました。

よろしく、 ステファン

関連する問題