2011-07-17 9 views
1

プレゼンテーションレイヤで呼び出せるサービスを公開するアプリケーションレイヤがあり、これらのアプリケーションサービスはプレゼンテーションレイヤにドメインオブジェクト(DTOを使用しない)を返します。ドメインオブジェクトの状態ユーザーが更新するためにアプリケーションレイヤーに戻されたときに、ユーザーが何を変更したかをどのように判断するのですか?DDD - プレゼンテーション/アプリケーションレイヤのダーティチェック

ので

  • 適用し、それは

    1. リポジトリからドメインオブジェクトを取得したUnitOfWork
    2. を開始できるように、アプリケーション層はUIによってドメインオブジェクトに対して行われた変更を決定しない方法あなたが使用しているので、ドメインオブジェクト
    3. への変更は、UnitOfWorkの
  • +0

    ORMを使用していますか? – UpTheCreek

    +0

    はい、Telerik OpenAccessを使用しています。 – David

    答えて

    0

    をコミットプレゼンテーションレイヤーと "下位レイヤー"の間でアプリケーションサービスを使用するには、ORMセッションから切り離されたドメインオブジェクトを使用し、プレゼンテーションでそれらを操作し、永続性のために戻します。

    本当の質問はなぜこれが必要なのですか?ユーザーがUIでそれを変更するため、通常はエンティティの汚れチェックが必要なので、「あなたはこのフォームから離してもよろしいですか?」などのメッセージを表示する必要があります。

    どちらの方法でも、私はUIフレームワーク上でデータバインディングのメカニズムを調べることをお勧めします(WinForms/WPF?)。エンティティにINotifyPropertyChangedインターフェイスのようなものを実装させることができます。プレゼンターにUIでこの変更をリッスンさせ、現在編集されているエンティティをダーティとマークすることができます。 IsDirtyプロパティを含むエンティティの基本クラスを持つことができます。それはすべてあなたが何をしようとしているかによって異なります...

    +0

    私は私の質問にいくつかの詳細を追加しました。 – David

    +0

    さて、私はOpenAccessを使用していませんが、すべてのORMには、エンティティがセッションに常時接続されている場合、エンティティに更新が必要かどうかを判断する機能があると思います。私はあなたがそれをやっていないと推測します。エンティティが汚れていないかどうかを確認するためにデータベースにselectを送信する何らかの方法でエンティティをセッションにアタッチすることもできますが、これは実行する方法ではありません。私がINotifyPropertyChanged、BindingListsなどで汚れチェックを提案したものはまだまだ...あなたはコントローラやプレゼンターにこの作業を依頼し、永続化/更新する必要があるオブジェクトのサービスを呼び出すことができます –