2011-09-16 11 views
3

ドメインモデルエンティティを対応するビューモデルではなくUIレイヤーに直接渡すことは可能ですか?ドメインモデルビジネスエンティティをUIレイヤーに渡す質問

私の例では、UIはいくつかのユーザーデータを取得し、それをドメインサービスと対話するプレゼンタに渡します。ドメインサービスは、ユーザーからのデータに対して何らかのアクションを実行し、出力結果をドメインモデルエンティティとしてUIに戻します。通常はビューモデルに変換する必要があります。

問題は、返された結果を検査するユーザの選択(YまたはN)に応じて、それはさらなる処理のためにサービスに戻され、最後にリポジトリに保存される可能性があるということです。

返されたドメインエンティティを2つのステップの間のどこかに保存しないで、viewmodelを使用すると、それ以降の処理のために戻すことはできません。

このようなユーザーの操作が発生すると、いくつかの回避策がありますか?

答えて

1

MVPは、View,Presenter、およびModelという概念の周りに定義されています。ドメインエンティティとビューを区別する必要はありません。Model彼らは同じことができます(そしてそうすべきです)。

MVVMとは異なり、モデルはViewにバインドする役割を果たしていません。プレゼンターがモデルデータを使用してビューを操作するのは責任があります。 MVPにはViewModelという概念はありません。その用語は、一般にMVVMのために予約されており、ViewModelは、Modelを有することに加えて、Viewに密接に結合されたエンティティである。

+0

私は、モデルビューではなくビューモデルは、ビューモデルのビューへの結合、すなわちモデルのビューよりも「ビューのモデル」により、MVVMのより適用可能な用語であると言います" –

+0

申し訳ありません。私はViewModelを' Model' 'View'' ViewModel'のように使いました。 – TheCodeKing

+0

OK、ViewmMdelsを使用する場合はどうすればよいですか?私は 'Professional ASP.NET Design Patters'のブックアプリケーションアーキテクチャを指しています。ドメインモデルエンティティとユーザーがViewModelsを連続して処理する間にユーザーのやりとりが必要な場合の回避策は何ですか? –

1

中規模から高度なドメインの複雑さがビジネスロジックの観点からドメインモデルを設計するため、ビューモデル(MVVMの場合)またはMVC/MVPのモデルのいずれかで、ドメインモデルからドメインモデルを分離することをお勧めしますドメインモデルの一部を示す傾向のあるデータをバインドまたは提示したり、プレゼンテーションのために大陸になるオブジェクトを平坦化したりするときは、プレゼンテーションデータ以外の細かいレベルのオブジェクト指向設計が必要です。

また、分散アプリケーションを開発するときに、データをサービス(リモートファサード)で公開する必要がある場合もあります。したがって、DTOの観点からオブジェクトを公開することがドメインモデルを公開しないことが非常に好ましいですドメインモデルよりも複雑さと細かさが異なります。ドメインモデルをプレゼンテーションフレンドリーや消費者にやさしくするように強制しないでください。プレゼンテーションモデルやコンシューマーを破損してビジネス指向ドメインモデルを使用したり、 。

+0

モデルは「プロフェッショナルASP.NETデザインPatters」のように区切られますが、質問がユーザーにのDTOを提示すると、次の2つのカテゴリーでの相互作用を考えることができる未解決のまま –

+0

UIのインタラクションを処理する方法です: 読む:ちょうどですユーザーに表示されるDTOを返すクエリのみを読み取ります。 書き込み:より良い名前のコマンド。ドメインエンティティで動作し、ロジックを実行する書き込み専用コマンドです。 読み取りから書き込みへのコンセプトを分離しようとすると、これはCQRSアーキテクチャのさまざまなものです。 check(http://moh-abed.com/2011/09/13/pure-old-ddd-with-a-twist-from-cqrs/) –

+0

ドメイン層は調査のためにModelEntityをUserに渡す必要があります。それをDTOに変換することができます。ユーザーは、そのエンティティをドメイン層でさらに処理するかどうかを決定します。問題は、ModelEntityを保存して、DTOを使用した場合、ユーザーアクション後にドメインレイヤーがそれをさらに処理できるようにすることです。それを行うためのパターンは何ですか? –

関連する問題