インターネットにはUnitOfWork
パターンに関する情報が満載です。 SOでも例外ではない。UnitOfWorkはTransactionと同じですか?それともそれ以上ですか?
私はまだそれについて何かを理解していません。私の理解ではUnitOfWork = Transaction in DB
。それで全部です;それ以上は何もない。
これは間違いありませんか?
私の混乱は、異なるORM
で実装されているためです。 NHibernate
はTransaction
以上の場合にISession
を使用します。 Dapper
はすべてあなたに残します。
私の質問は、ORM
または技術を考慮していないデザインパターンについてのものです。
Transaction
以上の場合は、どうか説明してください。
編集1
@デビッド・オズボーンによって答えで提案されているようにthisリンクへの参照。
作業ユニット(Unit of Work)は、データベースに影響を与える取引 トランザクション中に行ったすべての作業を追跡します。作業が完了したら、 の結果としてデータベースを変更するために必要な作業はすべて となります。
だから、これはUnitOfWork
がDBTransaction
もっとであることを意味します。続き
は、追加の責任をだ、次のとおりです。 -
は、あなたが仕事のこのセッションでは、削除、変更、挿入しているかの状態を維持します。
この状態に基づいて、作業が完了したらデータベースを変更します。
上記の引用は明確ではありませんが、クエリのバッチ処理を制御することもできます。
私の理解は正しいですか?
あなたのユースケースやUnitOfWork(別名CreateCustomer、MakeBooking、CreateInvoice、...)が何をすべきかによって決まると思います...私は1つの転写でこのように使用しますが、Unit Of Workはまた複数の転写であることもあります。複数の場合は、あなたは転記のロールバック/復帰を制御する必要があります。 – Jehof