2012-06-08 8 views

答えて

22

一般的に、パブリックインターフェイス/ APIをシステムに変更することなく、ドメインオブジェクトを変更することができます(ドメインについて新しいことを学ぶなど)。反対に同じこと:パブリックインターフェイスに変更が必要な場合は、ドメインモデルを変更する必要はありません。

このような観点から、私は決して公共のインターフェイス上で自分のドメインオブジェクトを公開しません。代わりに、パブリックインターフェイスの一部であるデータ転送オブジェクト(DTO)を作成します。この方法で、私のドメインとパブリックAPIへの変更は、独立して変更することができます。

+1

注釈付きのDTO(コマンド、クエリ、ドメインイベント)に基づいて、RESTの一部を生成することが可能であり、どのようにそうであれば?それに答えてくださいpls:http://stackoverflow.com/questions/26049934/is-it-possible-to-do-ddd-and-rest-interface-and-language-mapping – inf3rno

+2

これはちょっと偏っています。 DDDでは、ドメインから人為的に「ガード」する必要はありません。いくつかの概念は、モデリングされたものに近いほど「通過」し、モデルが正しくない場合を除いて隠されます。また、元の投稿では "REST over DDD"が疑わしいです。最初にドメインの上に何らかの種類のアプリケーション層が(ほとんどの場合)存在するはずです。つまり、ドメインオブジェクトはすでに分離されています。 –

+0

@RomanSusi「ドメインからユーザーを守る」という意味がわかりません。少し詳しく説明できますか?私は、パブリックインターフェイスがドメインと同じ概念を扱うことに絶対に同意します。私の主張は、パブリックRESTインターフェイスのコンシューマからドメインを「抽象化」することではなく、パブリックRESTインターフェイスの変更からドメインオブジェクトへの変更を切り離すことです。 – Marijn

2

DDDモデルを公開しないでください。これは、SOAフロントエンドが実装の詳細をクライアントに公開してはならないため、絶対に正しいです。あなたのユーザは、実装の詳細ではなく、ビジネス関数に依存する必要があります...しかし、これは、SOAバスに統合された、おそらく異種の複数のアプリケーションの素晴らしい設計を前提としています。

私は答えに追加したいと思っています。なぜなら、CRUDインタフェースに言及すると、アプリケーションのネットワークではなくアプリケーションのレイヤーを接着するためにSOAの原則が使用されるSOA乱用のケースであると思います。 SOAはエンタープライズがシステムを通信するための手段であり、MVCを実装する方法ではありません。シンプルでありながら誤解されています。たとえば、フロントエンドのGUIがバックエンドにアクセスするためにサービスを使用しているからといって、あなたは「SOAアプリケーション」を持っていません。

層を接着するために使用されるSOAの場合は、デザインを修正し、そのレベルの抽象化に適した設計アーキテクチャを使用してください。そうしないと、無DDDモデルを暴露していないCRUDYを使用する方法について、こちらをご覧勧告を誤解します、あなたはきっと、あなたは非常に複雑である、DDDにマッピングする必要があること、サービス・インターフェースのための独立したドメインモデルを作成することになります私たちが肥大化し、国連に保守混乱で終わるまで、あなたはなど別の名前で同じことをマッピングするためにドーザ、そのようなものを使用する必要がある、となると...

..ただ注意してください。

-Alex

Redzediは、我々は明確化が必要となるように右である....

すべてのように、これは言ってより行うことが非常に複雑です。複雑なドメインモデルをシリアライズすることは非常に難しいので、ドメインにロジックを入れない、貧血モデルの反パターン(http://martinfowler.com/bliki/AnemicDomainModel.html)、または別の貧血モデルを持つ持続性、すなわちDTO。

私は最悪のことはわかりませんが、どちらのオプションも悪いです。モデルに入るロジックをモデルに入れて、どこでも直接シリアル化できるはずです。長年にわたりドメインモデルを使用して、私の経験では

、私は最善のことは、中央のポイントであると考えています。はい、FowlerとEvansの状態では、ビジネスオブジェクトはロジックを持ちますが、すべてではありません(http://codebetter.com/gregyoung/2009/07/15/the-anemic-domain-model-pattern/)。素敵なサービス層が最高です。

たとえば、請求書にはアイテムについて知っていて、合計額を計算する手順があります(アイテムによって異なります)。しかし、請求書のアイテムは請求について知る必要はありません。だから、アイテムのコストが変わったときに、父親の請求書に円参照としてポインタを戻し、請求書の計算合計手続きを呼び出すとどうなりますか?

私は信じていません。これは、サービスの層が最初にイベントを受け取ってから、その手順を調整し、実装目的ですべてのビジネスオブジェクトを結合し、ドメインモデルのためのビジネス相互作用ルールに違反する必要がないタスクだと思います。

-Alex

+0

アレックス、SOA、またはドメインモデルからいくつかのDTOへのマッピングデータの問題ではないので、ビューは常に消費されます。 – redzedi

+1

こんにちはRedzedi、私の個人的な意見では、ドメインモデルを直接データベースにマップしようとします。ドメインモデルはデータモデルです。だから私は、ユーザーインターフェイスとデータベースの両方に1つのビジネスオブジェクトしか持っていません。 –

+1

これは非常に重要なことですが、ALEXという言葉は私には非常に魅力的ですが、私はそれについてあらゆることを聞いたことがあります.Marijnが上に述べたことはたくさんのpplが信じていますが、私の経験では、後続の追加がドグマティックコードマッピングの多くをもたらす異なる層のJavaクラス。 – redzedi

関連する問題