2009-08-27 17 views
5

ドメインドリブンデザインの現在の理解を使用して新しいアプリケーションを構築しています。これまでは、ドメイン内のエンティティを表すクラスと、データベースから取得/保持するリポジトリを持つクラスがありました。ドメインドリブンデザイン:複雑なデータのリストを取得する方法

私が遭遇している問題は、UIの中で、リスト内の項目が自分のドメイン内のどのエンティティにも直接マッピングされないいくつかのリストを表示する必要があることです。リストの中には、特定のエンティティのかなり深刻な負荷をかけて構築できるものもありますが、他のデータは基本的に検索時に合成され、エンティティの一部ではありません。うまくいけば問題をより明確に説明できる例を提供しましょう。

私のドメインでは、評価(回答する質問のセット)と回答(各ユーザが評価に提供した回答)が評価に与えられます。私も行動を取る。各アクションは、レスポンス(送信、承認、却下など)で行われたアクションを表します。私もユーザーがいます。

私が表示する必要があるデータのリストの1つに、応答と評価(応答されていない)が含まれている場合、各行には現在応答を処理しているユーザーに関する情報が含まれますレスポンスで取られたアクションを見て検索時間)各広告申込情報には、これまでの回答で行われたアクションである0個以上の子アイテムも含まれます。

現時点では、このデータセット全体をドメインエンティティで表現する方法はありません。私の最初の反応は、データベースからデータテーブルを取得し、ドメインエンティティをバイパスすることだけです。しかし、私はドメインオブジェクトを操作したり、オブジェクト自体に焼き付けられたさまざまなエンティティ間の関係を持つことで多くの価値を見ています。だから私の次のアイデアは、これらのリストをサポートするために私のドメインエンティティを変更することですが、私はこれらのリストシナリオをサポートするために私のエンティティに奇妙なプロパティを追加することと、私のアプリケーションのいくつかの場所でそのデータが必要なときにオブジェクトを使用することができます。

答えて

2

私はあなたのエンティティに靴ひねりをかけなければならないものの、サービス(ドメイン駆動設計の用語で)を提供し、要求されたときにこのデータを収集して提示することを提案しますビューとして。これにより、エンティティを厄介な方法で再処理する必要がなくなります。

現在のところ、このデータセット全体をドメインエンティティで表現する方法はありません。

あなたがここで感じている厄介なデザインの摩擦は良いことです。物事はあまりにも合わないという手掛かりです。

+0

Ok、私は今サービスを読んでいます。サービスがデータをビューとして表示すると言うと、ビューは何ですか?この目的のためだけに定義されたクラスですか?ドメインエンティティで構成されていますか? –

+1

私はMVCの意味でビューを使用しています。つまり、仕事を見せてくれるものです。実際の関連データはサービスによって集計され、ビューが渡されて表示されます(あなたの場合は、あなたが言及する「データのリスト」です)。サービスはビューに渡す前に別々のクラス(特に多くのビューが同じデータを使用している場合)でラップするように決定することもできますが、それは必ずしも必要ではありません。 –

2

あなたのような音が(この難しさのような形で)ドメインモデルの問題を特定しました。これらのリストボックスのそれぞれに表示する抽象概念は、ドメインモデルや「ユビキタス言語」ではあまり表現されていないようです。それらが何であるかを決め、名前をつけ、リポジトリにコードを追加して、エンティティまたは値オブジェクトになるかどうかを問わず、これらのオブジェクトのリストを生成してください。

+1

確かに私はこの問題を誤解しているかもしれませんが、私の最初の印象は、ドメインエンティティが追加のプロパティを必要としているということです。つまり、レスポンスエンティティは、レスポンスに加えられたアクションを表すAction(またはActionHistory)これまでのところ。" –

+0

あなたは私が持っている問題を理解しているように聞こえます。私はこれらの追加プロパティを追加することを検討していますが、正直なところ、それは私が本当に必要とするよりも多くのデータを特定の時間にロードすることに関するものです。アクションはかなり単純で問題はありませんが、ユーザーのエンティティはかなり複雑で、本当に必要なときにユーザーIDとユーザー名が必要なときに、ユーザー全体を読み込むための余分な作業のようです。しかし、エンティティを部分的に読み込むことは、私にとっては本当に面白そうです。 –

+1

パフォーマンス/最適化の問題であれば、John Feminellaの答え(それを処理するサービスメソッドを作成する)は間違いなく適切です。しかし、多くのOR/Mツールでは、これらのプロパティを怠惰にロードすることができます(これらのプロパティを使用していない場合や、独自のデータアクセスレイヤ/リポジトリを使用している場合はもちろんです)。 –

関連する問題