4

いくつかの静的リストを持つクラスがあります。説明のために、次の 2 つだけを示します。

public class Foo
{
    public static readonly List<long> FirstList(EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 1).ToList();
    }

    public static readonly List<long> SecondList(EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 2).ToList();
    }
}

私はデータベース コンテキストをすべての静的メソッドに渡すのが好きではありません。さまざまなアプローチについて何か提案はありますか?

4

4 に答える 4

4

その場合の良いアイデア (もちろん、静的メソッドの使用がアーキテクチャによって正当化される場合ですが、これはこの質問の範囲外のようです) は、静的メソッドを拡張メソッドとして作成することです。

public static class EfEntitiesExtensions
{
    public static readonly List<long> FirstList(this EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 1).ToList();
    }

    public static readonly List<long> SecondList(this EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 2).ToList();
    }
}

その後、次のように呼び出すことができます。

...
EfEntities dbContext = new EfEntities();
List<long> firstList = dbContext.FirstList();
于 2013-07-02T07:52:20.043 に答える
2

dbContext個人的には、オブジェクトをパラメーターとして渡すという考えは好きではありません。データ層を完全に分離して、別のクラスに格納できます。

public class DataAccess {
   private EFEntities _dbContext { get; set; }

   public EfEntities GetDbContext() {
        if (_dbContext != null) {
             return _dbContext;
        } else {
            _dbContext = new EFEntities(.....);
            return _dbContext;
        }
   }
}

次にDataAccess、毎回パラメーターとして渡すのではなく、必要なコンテキストを含むクラスを参照できます。

于 2013-07-02T07:53:10.070 に答える
1

静的にしないでください。これらのリストが返されるには、コンテキストが必要です。静的メンバーは、コンテキストレスとして設計されています。したがって、基本的に必要なのは、これらのメソッドをクラスインスタンスに移動し、依存性注入またはその他の種類のファクトリを介して構築時にコンテキストを提供することです。

静的に固執する設計上の決定は何ですか? ひどい回避策は、コンテキストを一度静的フィールドに渡してから使用することですが、それは基本的にクラスインスタンスで行うべきことです

于 2013-07-02T07:51:34.663 に答える