0

私は MVC4 で遊んでいて、現在シングルトンであるデータ アクセス レイヤーを作成しました。

私の質問は、これは良い考えですか?レイヤーにポーリング メソッドがあります。これが主な理由です (このポーリング メソッドはデータベースをチェックし、シグナルを使用して UI を更新します)。

また、データをキャッシュできるようにシングルトンを使用することをお勧めしますが、今は少し確信が持てません。このシングルトンは、たとえば 400 人の同時ユーザーにどのように対処しますか?

どんな助けでも素晴らしいでしょう!

コード -

  public class DataAccessLayer
{
    private static DataAccessLayer _instance;

    public static DataAccessLayer Instance
    {
        get
        {
            lock (_instance)
            {
                if (_instance == null)
                    _instance = new DataAccessLayer();

                return _instance;
            }
        }
    }

}

public class HomeController : Controller
{
    public ActionResult GetUsers()
    {
        return View(DataAccessLayer.Instance.GetUsers());
    }
}
4

2 に答える 2

2

シングルトンまたは静的クラスでスレッドの問題に対処する必要があります。ロックは役に立ちますが、特にロックの前にインスタンスが既に設定されているかどうかを確認しないため、処理が遅くなります。

また、コードの単体テストも困難です。

DataAccessLayerコンストラクターを使用して、コントローラーでのインスタンスを設定することをお勧めします。IoC コンテナーまたはカスタム コントローラー ファクトリを使用して、クラス インスタンスを作成し、それをコントローラーに渡すことができます。

単体テスト/モッキングを容易にするIDataAccessLayerために、具体的なクラスのインターフェイスを実装し、コントローラー コンストラクターでパラメーターの型として使用します。

于 2013-01-08T16:11:40.530 に答える
-1

この場合のシングルトンは必要ありません。ここでは、静的クラスとして DataAccessLayer を使用する方が適しています。

public class HomeController : Controller
{
    public ActionResult GetUsers()
    {
        return View(DataAccessLayer.GetUsers());
    }
}
于 2013-01-08T15:41:54.810 に答える