2012-01-30 2 views
4

DDDの原則を使用して新しいプロジェクトのインフラストラクチャを作成しました。私は、ドメイン内に工場/ハイドレーターを供給するリポジトリを持っています。アプリケーション層はファサードとして機能し、要求されたときに様々なビュー/編集モデルにドメインモデルをフラターニングします。ドメインオブジェクトのベストプラクティスのリストを返します

編集モデルは、ドメインモデルにマップされ、マージされ、流暢な検証を使用して検証されます。エラーが記録され、エラー・サービスを介してユーザーに報告されます。

これは完全に機能します。私の懸念は、これらのドメインオブジェクトのリストを作成する最良の方法です。その後、

1)水和物の完全なドメインモデルとリストにこれらを平ら:

いくつかのオプションが気にしています。ドメインモデルは、IEnumerableリストとしてキャッシュできます。このコレクションは次にフラット化され、要求しているビューにプッシュされます。

2)ドメインモデルの軽量表現である "projection"オブジェクトを作成します。これは、水分補給がほとんどまたはまったく必要ではなく、ドメインレベルに引き込まれ、viewModelにマッピングされて表示されます。

3)ドメインを "バイパス"し、IEnumerableを生成するアプリケーション層から呼び出されるサービスを持つ。これにより、ドメインはきれいになります。

解決策1はドメイン項目のリストを表示するために重くなると心配です。彼らはドメインの検索可能な性質のためにキャッチされますが、キャッシュが大いに役立つという保証はありません。

最高のオプションが何かについてのアドバイスをいただければ幸いです。

+2

あなたの考えは正しいですが、残念ながら確定的な回答はありません。シンプルさとコードのメンテナンスが目標の場合は、オプション1に進みます。あなたの目標がパフォーマンスであれば、オプション2に行ってください。私は本当に必要な場合はオプション3に行くだけですが、オプション2と組み合わせて劇的な速度向上をもたらすことができます。 –

+0

Yoda quote - "書き込みからの読み込みを個別に行う必要があります! " –

+0

私は#2方法を好んでいます。特に、ORMのEFやNHibernateのように、投射が実際にスリムなSQLを生成し、ワイヤを横断するデータが少なくて済むような場合です。 –

答えて

0

私は解決策2を好む。ドメインモデルをきれいに保つことが必要です。

CQS(Command Query Separated)によって、効果的で軽量なクエリアーキテクチャを実装できます。

関連する問題