データベースに2つの値があり、アプリケーション内の非常に多くのものの動作を定義しており、少なくとも近い将来は変更されません。静的変数を作成しGlobal.asax
、アプリケーションに値をロードするのが最善の決定ですか??。
4 に答える
一般的なルールは、値/データが期限切れになるか、特定の期間後に変更が必要になることがわかっている場合はキャッシュを使用し、そうでない場合は静的変数を使用します。同様の議論を見つけましたHttpRuntime.Cache[]とApplication[]また、 ASP.NETキャッシング:テクニックとベストプラクティス
もチェックしてください。
はい、静的変数にキャッシュできます。しかし、今すぐ変更する必要がなく、同じままである場合は、定数として、またはweb.configで定義してみませんか?
アプリケーションの起動時にデータベースから値を設定する、これらの定数設定のプロパティを持つ静的クラスを作成することをお勧めします。
データベースに保存されている「システム」設定がある場合は常に同じことをしています。私はそれらをプロパティとして静的クラスに保持し、常にそれらにアクセスします。また、データベーストラフィックを削減するために、頻繁には変更されないが頻繁に使用される小さなテーブル(つまり、アイテムグループ)のコンテンツにも同じ手法を使用します。常にデータベースにアクセスする代わりに、読み取り専用のコレクションを作成してアクセスします。
しかし、それが清潔でメンテナンスが簡単である限り、何でもあなたに最も合うものの問題です。
個人的には、MVCサイトに依存性注入を使用しています(ninjectが私が好むものです)。これにより、変数を.InSingletonScopeとして定義できます。これは、アプリケーションで厄介な統計をぶら下げる必要がないことを意味します。次に、最初のリクエストでDBから値をロードし、ローカル変数に格納します。
つまり、私はこれを使用します:
public class CachedFooProperty : IFooProperty
{
public CachedFooProperty(IRepository<Foo> fooRepo)
{
Foo = fooRepo.GetFoo();
}
public Foo Foo{get;private set;}
}
次に、次のようにバインドします。
Bind<IFooProperty>().To<CachedFooProperty>().InSingletonScope();
この方法の良いところは、バインディングを変更するだけでキャッシュのオンとオフを簡単に切り替えられることです。また、設定を使用するすべての場所を変更することなく、これをweb.configベースのconfigメソッドに非常に簡単に変更することもできます。