6

私が理解しているように、UnitOfWorkクラスは、ドメイン内のビジネストランザクションの概念を表すことを目的としています。これは、データベーストランザクションを直接表すことは想定されていません。これは、可能な実装の1つだけの詳細です。

Q:では、なぜ作業単位パターンに関する多くのドキュメントが「コミット」および「ロールバック」メソッドに言及しているのですか?

これらの概念は、ドメインまたはドメインの専門家にとって何の意味もありません。ビジネストランザクションは「完了」できるため、UnitOfWorkは「Complete」メソッドを提供する必要があります。同様に、「ロールバック」メソッドの代わりに、「クリア」としてモデル化する必要がありますか?

アップデート:

回答:以下の両方の回答が正しいです。UoWには、オブジェクト登録と発信者登録の2つのバリエーションがあります。オブジェクト登録では、ロールバックはすべてのメモリ内オブジェクトへの変更を元に戻すのに役立ちます。発信者登録では、ロールバックは記録されたすべての変更をクリアするのに役立ち、その後のCommitの呼び出しは何もしません。

4

2 に答える 2

2

少なくともエンタープライズアプリケーションアーキテクチャのパターンでFowlerによって定義されているように、作業ユニットのデザインパターンは、オブジェクトリレーショナル永続性マッピングに関する実装の詳細です。これは、Evansのドメイン駆動設計で定義されたエンティティではありません。

そのため、ビジネスディスカッションの一部であってはならず、ドメインモデルで直接公開されているエンティティであってはなりません(おそらくcommit()メソッドを除いて)。代わりに、その目的は、「クリーン」および「ダーティ」なビジネスエンティティ(クライアントに公開されているドメインモデルのオブジェクト)を追跡することです。目的は、永続性(通常はデータベース)から毎回読み取りおよび書き込みを行う必要なしに、ドメインモデルとの複数の対話(Webコンテキスト要求で)を可能にすることです。

ビジネスエンティティは、メソッドが呼び出されたときにそれを呼び出します。それらの状態が変更されると、それらは作業単位にダーティとして登録されます。次に、Unit of Workcommit()は、オブジェクトグラフを書き出すという観点から、永続性トランザクション全体を処理し、rollback()エンティティの状態を元の状態に復元することを意味します。そのため、実装は「抽象化」にまで漏れていますが、その意図は非常に明確です。

一方、「元に戻す」と「完了」は、必ずしもこの定義と1対1でマッピングされるとは限りません。「元に戻す」または「クリア」は、たとえばビジネスコンテキストに応じて、オブジェクトグラフを部分的にのみロールバックできます。「完了」は、グラフをコミットするだけでなく、一部のエンティティの状態を変更する可能性があります。そのため、これらのメソッドをビジネス上の意味で、サービスレイヤーまたは集約ルートオブジェクトに配置します。

于 2011-01-20T18:35:04.467 に答える
1

同意します。私の推測では、「ロールバック」と「コミット」という用語は実際に既知の用語であるため(特にプログラマーにとっては意図を明らかにするため)、使用されていると思います。ただし、「完全」という用語を使用する方が正しいと思います。「クリア」に関しては、私はあなたに同意する傾向はありません。ドメインの専門家は、あなたが商取引を「クリア」することに同意するとは思いません。私の意見では、「元に戻す」の方が適切な用語です。

于 2011-01-20T17:24:26.040 に答える