NHibernateで既に提供されているものの上にUoW実装を記述するのはいつですか?実際の例?なぜNHibernateセッションの上でUnit of Workパターンを使用するのですか?
答えて
すでにNHibernateので提供されて記述されている作業単位のようなユニットを行うには理由がないので、作業。
私たちがWCFサービスで持っているものは、現在の作業単位のために私たちのアプリケーションで重要な情報を含む上位レベルの作業単位です。これには、NHibernateのSessionを抽象化することが含まれます。あなたがそれを分解すると、3つのカテゴリに適合するコードがあります。
Unit Of Workを処理するコードです。作業単位を後押ししている人は関係ありません。これは、NHibernate、iBatis、またはカスタムORMである可能性があります。すべてのコードは、読み込み、ロールバック、保存などを行う必要があります。これには、使用されたメカニズムについても気にする必要はありません。
NHibernate固有のことを行うため、ISessionを直接処理する必要があるコード。通常、これは作成する必要がある複雑なクエリと関連しています。
ユニットが作業単位で実行されているか、またはセッションにアクセスしているかを知る必要はありません。私たちはこの議論の一部としてこれを完全に無視することができます。
1のコードは、ちょうど私が直接制御していないコードや変更可能なものを抽象化しようとしています。これには2つの理由から価値があります。
開始時に、私たちはNHibernateで100%販売されていませんでした。私たちはiBatisや何かカスタムを検討していました。明らかにこれはもはや問題ではない。
チーム全体がNHibernateのエキスパートではなく、私たちもそれを望んでいません。ほとんどの人にとって、カテゴリ1に適合するコードを書いています。彼らが知っていることはすべて、ユニットオブワークです。カテゴリ2のコードを書かなければならないときは、NHibernateをよく理解しているチームの人々によって書かれています。
だから私はあなたが話している作業単位の種類は、私は仕事のより高いレベルのユニットは、値の多くを提供できることを示唆している必要はありませんと言うでしょう閉じます。 を初期化 - - をコミット - 私は両方のセッションおよびトランザクション管理のためにそれを使用するIDisposable.Dispose
- ロールバック
すべてのマッピングを正しく設定すると(カスケード)、特別な操作を行う必要はなく、ISession
はうまくいくでしょう。ただし、3層アプリケーションを作成する場合は、1回のトランザクションで実行するデータベース操作を手動で順序付けする必要があります。 「エンタープライズアプリケーションアーキテクチャのパターン」でファウラーの「リファレンス実装では、」良い出発点になります
class UnitOfWork...
public void registerNew(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
Assert.isTrue("object not dirty", !dirtyObjects.contains(obj));
Assert.isTrue("object not removed", !removedObjects.contains(obj));
Assert.isTrue("object not already registered new", !newObjects.contains(obj));
newObjects.add(obj);
}
public void registerDirty(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
Assert.isTrue("object not removed", !removedObjects.contains(obj));
if (!dirtyObjects.contains(obj) && !newObjects.contains(obj)) {
dirtyObjects.add(obj);
}
}
public void registerRemoved(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
if (newObjects.remove(obj)) return;
dirtyObjects.remove(obj);
if (!removedObjects.contains(obj)) {
removedObjects.add(obj);
}
}
public void registerClean(DomainObject obj) {
Assert.notNull("id not null", obj.getId());
}
作業インターフェイスの私の基本的な単位は、以下の方法 が含まれています。 これは、異なるセッションスコープに対して何度もコードを書く必要がないので便利です。(1リクエストあたりの作業単位、1リクエストあたりのスレッド数、1スレッドあたり)
- 1. NHibernateとUnit of Workパターン
- 2. Unit of Workパターンの.netリファレンス実装は何ですか?
- 3. Unit Of Work
- 4. DDD、Unit of Work ...エンティティフレームワークなし
- 5. EFとNHibernateで動作するUnit of Workを実装する方法
- 6. Unit Of WorkパターンでDisposeを正しく使用するにはどうすればいいですか?
- 7. Unity.Mvc3をHierarchicalLifetimeManagerとUnit Of Workパターンで使用する遅延ローディングはありません
- 8. 私のDataContextがオブジェクト(Unit Of Work)に対する変更をなぜ見ないのですか?
- 9. Entity Framework + Repository + Unit of Workを使用してアプリケーションを起動する方法は?
- 10. DALでUnit of Workパターンを使用していますが、Application_Startでデータアクセスを実行する必要があります。私は何をすべきか?
- 11. 私は、汎用リポジトリを使用してEntity Frameworkの上にUnit Of Workパターンを実装しました。私は実際に何を達成しましたか?
- 12. なぜwcfチャットアプリケーションでセッションを使用するのですか?
- 13. Spring jmsTemplate send unit testing doen't work
- 14. モノレール、nhibernateとセッションごとの要求パターン
- 15. なぜSCTP上でDTLSを使用するのですか?
- 16. なぜWindows上で単純なFile.Writeのcgoを使用するのですか?
- 17. WebApi - 依存性注入はどのように 'Unit of Work'に関連していますか?
- 18. unit test - finish()、handler、threadを使用するこのコードでユニットテストが失敗するのはなぜですか?
- 19. Entity FrameworkとUnit Of Workで挿入と削除を同じコミットで実行しようとすると、一般的なプラクティスは何ですか?
- 20. ここでObserver/Pub-Subパターンを使用するのはなぜですか?
- 21. なぜio_service :: workを使うべきですか?
- 22. パターンの存在にexist()関数を使用するのはなぜですか?
- 23. セッションなしのNHibernate
- 24. なぜ "type of SVGElement.prototype.getBBox"が "undefined"ですか?
- 25. MoqでNHibernateのセッションをモック
- 26. .NET Nhibernateセッションでメモリ使用量が増加する
- 27. Axonエラー:java.lang.IllegalArgumentException:作業ユニット(Unit of Work)に既に同じ識別子を持つ集計があります
- 28. F#の文字列のコンパイル時の制約.Unit of Measureと同様ですか?
- 29. なぜboost :: asio :: io_service :: workを使用する必要がありますか?
- 30. 「My Work」チームエクスプローラウィジェットがVisual Studio 2015 Professionalで使用できないのはなぜですか?
ShaneC、私も同様の質問があります。私のニーズに合った作業単位を作成したようです。あなたは私の質問を見て、あなたの$ 0.02を提供できますか? http://stackoverflow.com/questions/2604762/using-unit-of-work-design-pattern-nhibernate-sessions-in-an-mvvm-wpf – Echiban