10

乾杯!リポジトリで Unit of Work を使用することに疑問があります。特に、Entity Framework の子コンテキストの役割。このテーマについて多くの情報を検索しましたが、さまざまなタイプの使用パターンを見つけただけで、混乱し、主な考えを理解できません。

1.捨てる・貯めるってどこで意識すればいいの?・DbContextのInheritanceクラスで正しくDisposableを実現しているか?その後、Repository と Unit of Work で実現しますか、それとも Uni fo Work で実現しますか?

-作業単位またはリポジトリのどこにメソッドを保存しますか?

私のリポジトリはジェネリックになります私のコードはアーキテクトスタイルやその他の詳細で正しいですか?私の考えが間違っているかどうか教えてください.

    interface IRepository : IDisposable
    {
        void Create();
        void Delete();
        void Update();
        void Get();
        T getSomeByExpression()
        ...Some another costum operations
        ...should I remember about Save here? 
    }

    class Repository : IRepository
    {
        SomeContext context = new SomeContext();
        ...Using using(context = new SomeContext()){} in functions??
        ... 
        ....Disposing?
    }

    interface IUnitOfWork : IDisposable
    {
     ...Which methods I should realize?
    Commit()
    Save()
    ...Need some another methods like rollback, Attach() Add() or Dispose or something else?
    }
    class UnitOfWork
    {
     ...Collection of Repository

    }

ロジック レベルの作業単位の後に使用しますか? このテーマを理解するのを手伝ってください。

Unit Of Work と Repository パターンを一緒に正しく使用する方法を知りたいです。特に DBContext を含めます。また、Dispose などの操作をどこで使用するかを知りたいです。どの操作が UnitOfWork に一般的にあるべきか、保存など。リポジトリ内のコンテキストをどのように破棄しますか?

4

1 に答える 1

14

これは、MVC を使用した作業単位の実装に関する優れた記事です。

私は通常、取引が完了したらユニットを処分します。たとえば、アクションが親を作成することであった場合、いくつかの子とそれらを添付し、それが終了したらすぐに破棄します。

上記に関する詳細を追加:

あなたの質問を読み直すと、実際の実装ではなく、作業単位の理論についてより多くの情報が必要なように思えます。申し訳ありません。

これに関連するMSDNのより良い記事がありますが、要約します。

Martin Fowler によると、Unit of Work パターンは「ビジネス トランザクションの影響を受けるオブジェクトのリストを維持し、変更の書き込みと同時実行性の問題の解決を調整します」。

通常、作業単位パターンを使用して、関連するすべてのリポジトリをまとめ、リポジトリを分離したままで同時実行の問題を解決します。

Unit of Work パターンを使用する最良の方法の 1 つは、異なるクラスとサービスが単一の論理トランザクションに参加できるようにすることです。ここでの重要なポイントは、単一のトランザクションに参加できるようにしながら、異なるクラスとサービスを相互に認識しないようにすることです。

  • 「捨てる・貯めるってどこに意識すればいいの?」

あなたの質問を完全に理解しているかどうかはわかりませんが、作業単位のライフサイクルを管理するために何をすべきかを尋ねていると思いますか?

これに関連する別のSO投稿がありますが、要約は現時点で作業単位を所有するものであり、作業単位の範囲を設定する方法に関連しています。たとえば、ビジネス コマンドや MVC アクションなどです。

  • 「DbContext の Inheritance クラスで Disposable を正しく実現していますか? その後、Repository と Unit of Work で実現するか、Uni fo Work だけで実現しますか?」

つまり、DbContext をどこで処分する必要があるのでしょうか。私はそれが仕事の単位であるべきだと信じています。単一の作業単位で複数のコンテキストを作成/破棄する場合は、それらを 2 つの異なる単位に分割する必要があります。

  • 作業単位またはリポジトリのどこに保存メソッドを置きますか?

作業単位はコンテキストとトランザクションを処理し、更新の重複を防ぐためのロジックを含める必要があります。これは、保存機能を作業単位で制御する必要があるためです。

于 2012-08-04T16:04:47.383 に答える