2011-02-09 9 views
1

あなたが見たらat this SO question私は次のステップで質問があります。作業単位、リポジトリ、コンテキスト

ItemsとSubItemを生成する2つのリポジトリがあるとします。私はUnitOfWorkも持っています。このUnitOfWorkは、(この単純なケースでは)2つの異なるアイテムへの変更のコンテキストとして機能します。

はUnitOfWorkのを発生させるいくつかの方法があるように思われる、時々これはリポジトリに注入され、時にはこれは工場によって生成された(その後、いずれかの工場から注入または取得することができます。

私の質問がありますどのようにUnitOfWorkのは、その変更がコミットされるようになりましたリポジトリを通知していますか?

私は、リポジトリにコミット/ロールバックのためのUnitOfWorkのイベントをサブスクライブすることができますね。

2番目の質問、ユニットのアイデア私がこの権利を持っている場合、confの可能性がある更新を調整することですリクト私のItemとSubItem(Itemには複数のSubItemがあります)を使用して、UnitOfWorkはこれを調整して、Itemが最初に書き込まれ、SubItemが書き込まれるようにします。今私は間違っているリポジトリについて知るために作業単位が必要なようです。

ありがとうございました。

答えて

2

私のリポジトリを構成する方法は、Repo上のBeginUnitOfWork()メソッドによって生成されたUnitOfWorkを単に「トークン」にすることでした。これはRepo上の他のメソッドにほとんど渡されましたDB呼び出し。概念的にどのように行うかを知っていなければならない唯一のことは、そのUOWに関連付けられたNHibernateセッションが閉じられる原因となります。これはRepoの保護されたメソッドに代理人が与えられ、その後Disposeメソッドで呼び出されます。これが私にとって何をするのかは、実際のデータアクセスメカニズムを完全に抽象化したものです。私はバックエンドにかかわらず同じパターンを実装することができ、パターンのユーザーは実際のデータアクセスメカニズムを得るためにUnitOfWorkをハックすることはできません。

YMMV;リポジトリと作業ユニットに依存するようにDBオブジェクトを実行する必要のあるクラスが必要です。追加のデリゲートを使用してUnitOfWork自体のメソッドを公開し、それが唯一の依存関係になるようにすることができます。

+1

興味深い。私が最初に持っていた概念上の問題の1つは、私の作業単位が操作が追加されている間に、かなり古いもののために生きているということでした。永続コールが無期限に延期されないように、フレームを再構築すると、管理が非常に簡単になります。 – Ian

関連する問題