0

次のように組み立てられた単純な3層アプリケーションを実装しようとしています。

1-DAL(これは、UnitOfWorkおよびIRepositoryであり、POCOのエンティティ(エンティティフレームワークT4)を使用します)

2-BLL(DALへの参照)

3-UI(BLLへの参照)

私は多くの記事を読んだので、古典的なUnitOfWork-Repositoryパターンを実装することにしました。これらのリポジトリは、自己追跡エンティティを認識していません。

public interface IRepository<T>
{
void Attach(T entity)
{
...
}

質問:コンポーネントがwinFormコンテキストで実行される場合、一部のUIコントロールが一部のエンティティプロパティを変更する可能性があるため、Edit(Tエンティティ)としてリポジトリのメソッドをさらに呼び出すと、エンティティが内部オブジェクトコンテキストによってすでに追跡されている場合は役に立ちません。明らかに、Webプラットフォームはステートレスであるため、Webコンテキストで実行している場合は、すべて正常に機能します。簡単なトリックは、すべてのBLL操作の後にobjectContextを破棄することですが、この回避策を使用したいかどうかはわかりません。だから私はすべてのケースを管理するためにもっときれいな解決策を探しています。

IRepositoryはSTEについて何かを無視する必要がありますか?ステートレスな環境をシミュレートするために、BLLは常に独自の内部リポジトリやユニットを破棄する必要がありますか?

4

1 に答える 1

1

WinFormsで開発している場合、なぜステートレスプラットフォームをシミュレートしたいのですか?リポジトリとUnitOfWorkパターンに関しては、EntityFrameworkに厳密にバインドされているものと見なさないでください。UIレイヤーのコンテキストを忘れてください。これらのパターンは、使用されるORMとは無関係であり、DALを簡単に切り替えて、アプリケーションをより効率的にテストできるようになっています。

于 2013-04-04T18:58:07.377 に答える