素人の言葉で言えば、データベースオブジェクトに関する作業単位は何ですか?私はデータベーステーブルをC#クラスに変換する方法を研究していて、この用語に頻繁に出くわしますが、誰もがそれが何であるかをすでに知っている必要があるかのように説明しているようです。
3 に答える
ここでマーティン・ファウラーを引用します。彼の意味は、私が見た中で最も明確で、最も理解しやすいものの1つだと思うからです。
作業単位は、データベースに影響を与える可能性のあるビジネストランザクション中に行うすべてのことを追跡します。完了すると、作業の結果としてデータベースを変更するために実行する必要があるすべてのことがわかります。
基本的には、2つのチェックアカウント間で送金するなど、アトミックアクションを完了するために必要な作業を意味します。
例(擬似コード)
Procedure TransferBetweenAccounts(Amount, Account source, Account target)
Begin Transaction
Debit source account By (Amount) }----Unit of
Credit target account By (amount) }----Work
End Transaction
If Transaction Failed
Roll Back
作業単位と永続性の無視について説明しているMSDNの優れた記事は、次のとおりです。http : //msdn.microsoft.com/en-us/magazine/dd882510.aspx
LINQ to SQL では、作業単位は次のように定義されます ( http://msdn.microsoft.com/en-us/library/bb546187.aspx ):
データ コンテキストのインスタンスには、1 つの「作業単位」の有効期間が必要です。疎結合環境では、通常、作業単位は小さく、SubmitChanges への 1 回の呼び出しを含む 1 つの楽観的なトランザクションです。したがって、データ コンテキストはメソッド スコープで作成および破棄されます。作業単位にビジネス ルール ロジックの呼び出しが含まれている場合、通常は、その操作全体に対して DataContext インスタンスを保持する必要があります。
作業単位を理解することは、LINQ to SQL で成功するために重要です。作業単位パターンが LINQ to SQL にどのように適合するかについては、このページ (更新シナリオ) をご覧ください。
http://aspalliance.com/1414_LINQ_to_SQL_Part_4__Updating_our_Database.3
Martin Fowler の本 Patterns of Enterprise Architecture には、このトピック専用のかなりの数のページがあります (pg 184-194)。彼の簡単な定義は次のとおりです。
「ビジネス トランザクションの影響を受けるオブジェクトのリストを維持し、変更の書き込みと同時実行性の問題の解決を調整します。」