1

ここで、静的クラスと静的関数は多くのメモリを消費するため悪いことがわかりました。

データベースとやり取りする必要があるなど、多くのことに使用します。

この静的ローカリゼーション クラスの一部である GetResources の例

public static class SFLocalization
{

    public static string GetResources(string key)
    {
          string CurrentLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.ToString();
          if (MemoryCache.Default["Resources_" + key] == null)
          {
          string x 
          using (Db _db = new Db())
            {
                MemoryCache.Default["Resources_" + key] = _db.Languages.First(l => l.Key == key && l.LanguageCode == CurrentThread).Value;
            }
          }
          return MemoryCache.Default["Resources_" + key];
    }
}

そして、ビュー、コントローラーなどで.翻訳された値を取得するためにこれだけを書きます

 @SFLocalization.GetResources("NewsletterBoxTitle")

1.) そのような状況での静的クラスは本当に悪いのでしょうか?

2.) 代替手段は何ですか? 多分依存性注入(ninjectなど)?? (本 Apress - Pro Asp.net Mvc 4 で見ました

4

1 に答える 1

6

静的クラス (またはモジュール) は、多くの場合、ドメイン サービスまたはアプリケーション サービスの代わりになります。どこからでもアクセスできるように、このサービスを静的クラスとして公開すると便利なことがよくあります。これは、ローカリゼーションなどの分野横断的な問題の場合に特に当てはまります。

このアプローチにより、すぐに稼働できるようになりますが、いくつかの問題が発生します。いつでもどこでもサービスにアクセスできると、不適切なコーディング手法が助長され、簡単にスパゲッティ コードにつながる可能性があります。また、静的モジュールは、それらを使用するクラスの単体テストを非常に困難にします。これらは両方とも、プロジェクトのサイズが大きくなるにつれて指数関数的に増大する問題です。そのため、通常はできるだけ早く対処することをお勧めします。

質問で述べたように、依存性注入は、サービスを静的/グローバルにすることなく、クラスがサービスにアクセスできるようにする 1 つの方法です。

于 2013-07-18T09:10:55.530 に答える