2

作業単位パターンは、ドメイン上のすべてのアクションを追跡し、複雑なロジックが実行されたときにそれらをすべて一度に適用するためのコンテキストを維持する方法です。

ORM(たとえば、NHibernate)で使用する場合、基になるデータベースへのすべてのアクションに使用される共有ISession(またはLinq 2 SqlのDataContext)を使用して作業単位を実装することをお勧めします。

特にサーバーアプリケーション、主にASP.NetMVCまたはASP.NetWebフォームを扱う場合は、正しく実装するのが難しい場合があります。

私はRhino.Commons(NHibernateに向けてギアリングされています)での実装に手を出しましたが、他のいくつかのことを知っていますが、それらの長所と短所をよく理解していません。

最も一般的に使用されているものと、それらをASP.Net MVC(またはWebFormsですが、私は主にMVCに興味があります)にシームレスに統合する方法は何ですか?

4

1 に答える 1

3

更新:返信後にこれ(unit-of-work-pattern-in-net)を見ました。

多分 System.Transactions.Transaction はあなたが求めているものです。

Unit-of-Workは、数年前にメインフレーム ベースのアプリケーションに最初に適用された用語です。アプリは一連の手順を実行します。いずれかのステップが失敗した場合、データベースは前の「同期点」にロールバックされます。アプリは、作業単位のすべてのステップを正常に完了すると、新しい同期点を記録します。ステップはユニットのように振る舞いました。

メタファが進化して、.NET では Transaction コンストラクトができました。トランザクションのスコープ内の回復可能なデータ ストアで実行される作業は、ACID プロパティを使用して 1 つの単位として実行されます。これらのデータ ストアの例としては、最新の RDBMS、MSMQ などのキュー システム、Windows のファイル システムまたはレジストリ (KTM 経由) などがあります。トランザクションが解決されると、すべてのトランザクション ストアに対するすべての操作がコミットまたはロールバックされます。

nHibernate や ISession コンストラクトについては知りません。しかし、伝統的な意味で「作業単位」という用語を使用している場合、必要なのはトランザクションだと思います。

トランザクションを ASP.NET MVC に統合することについては、それが何を意味するのかわかりません。トランザクションは、UI モデルが何であるか、または UI フロー コントロールをどのように設計したかを気にしません。データベース(「モデル」だと思います)を更新する場合、その更新をトランザクションに含めるオプションがあります。単一のトランザクションの一部として複数の更新がある場合にのみ、本当に意味があります。一方で、トランザクションが長期間オープンのままになることは望ましくありません。データベースをロックすると、競合が発生し、スループットが低下します。

于 2009-06-03T18:21:53.473 に答える