2016-10-07 31 views
2

インターネットにはUnitOfWorkパターンに関する情報が満載です。 SOでも例外ではない。UnitOfWorkはTransactionと同じですか?それともそれ以上ですか?

私はまだそれについて何かを理解していません。私の理解ではUnitOfWork = Transaction in DB。それで全部です;それ以上は何もない。

これは間違いありませんか?

私の混乱は、異なるORMで実装されているためです。 NHibernateTransaction以上の場合にISessionを使用します。 Dapperはすべてあなたに残します。

私の質問は、ORMまたは技術を考慮していないデザインパターンについてのものです。

Transaction以上の場合は、どうか説明してください。

編集1

@デビッド・オズボーンによって答えで提案されているようにthisリンクへの参照。

作業ユニット(Unit of Work)は、データベースに影響を与える取引 トランザクション中に行ったすべての作業を追跡します。作業が完了したら、 の結果としてデータベースを変更するために必要な作業はすべて となります。

だから、これはUnitOfWorkDBTransactionもっとであることを意味します。続き

は、追加の責任をだ、次のとおりです。 -

  • は、あなたが仕事のこのセッションでは、削除、変更、挿入しているかの状態を維持します。

  • この状態に基づいて、作業が完了したらデータベースを変更します。

上記の引用は明確ではありませんが、クエリのバッチ処理を制御することもできます。

私の理解は正しいですか?

+0

あなたのユースケースやUnitOfWork(別名CreateCustomer、MakeBooking、CreateInvoice、...)が何をすべきかによって決まると思います...私は1つの転写でこのように使用しますが、Unit Of Workはまた複数の転写であることもあります。複数の場合は、あなたは転記のロールバック/復帰を制御する必要があります。 – Jehof

答えて

2

originates、AFAIK、論理/業務トランザクション中にオブジェクトの[パーシスタンス]状態を追跡するためのORMツールが必要です。

作業ユニットがこれを管理する方法、および基礎となるストレージテクノロジと格納されるオブジェクトとの関係は、実装の詳細です。

間に多数のSQL文を持つデータベーストランザクションは、恐らくは作業単位でもあります。しかし、主な違いは、パターンで定義されているように、作業単位がそのレベルの詳細をオブジェクト・レベルに抽象化しているということです。

+0

できます。ここでもまた、実装の裁量に左右されます。私はNHibernateが条件が正しいときにバッチ処理を行うことを知っています。 –

+1

@DavidOsborne私はORMがまだ出来なかった時代にさかのぼることさえ確信しています:) – guillaume31

+0

興味深いのは、@ guillaume31。私の経験はファウラーのパターンまでしか戻りません。 –

3

UnitOfWorkは取引です。テクニカルトランザクション(dbトランザクション)ではなく、テクニカルトランザクションと結びついていることもあります。それは

として定義されてenterprices application patterns

は、ビジネス・トランザクションによって影響を受けるオブジェクトのリストを維持し、変更と並行性の問題の解決のうち、書き込みを調整します。

変更の書き方や保存タイプは定義しません。 HTTPを使用して

applcationは、SQL

  • ファイルシステムを使用して

    • データベースに変更を書き込むかもしれない
    • ストリームを使用して永続性サービスは
    • 分散キャッシュやメソッド呼び出しを使用していても、メモリ内のストレージを要求し

    UnitOfWork(業務トランザクション)は、他のビジネストランザクションに有効なビジネスオブジェクトのみが表示されるようにします。

    など。アプリケーションがユースケースを実行すると、ビジネスオブジェクトが変更されます。 2つのビジネストランザクション(通常はユースケース)が並行して実行される場合、アプリケーションは各ビジネストランザクションが実行する変更と他のビジネストランザクションがそれらを参照する時間に注意する必要があります。

    技術的には、これは多くの場合、dbトランザクションを使用して行われます。したがって、作業単位は通常dbトランザクションです。

    ORMフレームワークを使用して永続性を処理するアプリケーションでは、通常、単語単位とdbトランザクションの間に1対1の関係があります。したがって、作業単位とdbトランザクションの違いは通常、開発者には関係ありません。

  • 関連する問題