2010-12-07 19 views
4

私は最近、Webアプリケーションプロジェクトにパッチを当てることに関与し、web.config(app.settings)の代わりに以前の開発者がデータベース設定テーブルを使用していることに気付きました。Webアプリケーションの構成設定 - ベストプラクティス

私はどちらを使用しますか? web.configまたはデータベーステーブル?どちらがベストですか?

+0

Andyさんに感謝します。 – Rob

答えて

7

物事は次のような状況でweb.configファイルに入る必要があります。

  • 彼らが利用可能なデータベースにするために使用可能でなければならないものだ

  • 彼らは」(DB接続文字列を!)変更が必要な場合は、アプリケーションプールをリフレッシュしたい、または変更する可能性が非常に低いものを再作成します。彼らは、データベースが何らかの理由で利用できない場合に利用できるようにする必要があります(例えば、ログファイルを電子メールアドレスのリストとにエラーメッセージを送信するためのSMTPサーバー、または場所など所属)のもの

物事は次のような状況でデータベースに入る必要があります。

  • あなたのDBとウェブの層の両方がその設定を使用しています。

  • アプリケーションプールを強制的にリフレッシュせずに、構成を即座に変更する必要があります。あなたはおそらく、あなたが不必要デシベルを打つていないので、ウェブ層に何らかの方法でそれをキャッシュするデータベース内の設定を置くつもりなら - と述べ

。私はこのためにCacheクラスを提案します。

上記以外にも、サーバーの使用に関する会社のポリシーも考慮する必要があります。 dbを使って作業することが非常に難しい場合は、web.configに物を入れる方が意味があるかもしれません。

+0

あなたは次のことをどういう意味ですか? *あなたのDBとあなたのWeb層の両方がその設定を使用します* – Sam

1

なぜそれが理にかなっています。 devはDBを使用して設定しました。あなたはweb.configを持っていなければなりません、私はASP.NETがそれなしでは動作しないと思います。プロジェクトの設定はweb.config(カスタムコントロールの宣言、追加のアセンブリなど)に行かなければなりませんが、ユーザー設定やビジネスロジックに特有のものは、データベースの方が良いかもしれません。

+0

いいえweb.configが必要ですが、アプリの設定セクションはわかりませんでした。基本的に私は印象のアプリの設定の下で感覚 - 迅速かつ簡単に変更をdbの設定変更が少し厄介です。あなたはそれを変更しないで壊れていない場合は、前の開発作業を変更しないことについて正しいです。 – Rob

1

私の会社の開発者とDBAの間で争点となる問題。

私の意見では、アプリケーションレベルの読み取り専用設定には常に設定ファイルを使用するべきだと思います。設定がユーザー固有のものであるか、実行時に編集可能なものであれば、そのアプローチを再考する必要があるかもしれません。

ストアドプロシージャ内で内部的に使用される設定がデータベースに格納される状況があります。私はこれについていくつかの正当性を見ることができますが、パラメータを介して値をプロシージャに渡すことができるので、重要ではありません。

+0

良い点は保存されている点にあります。私は、データベースの設定をすることで、データベースへのアクセスがずっと簡単になると思います。しかし、このprevデベロッパーは、ユーザーとアプリのためのすべての設定を使用しました。 – Rob

1

Webアプリケーションがデプロイされると、開発者は本番環境のファイルweb.configにアクセスできなくなる可能性があります。

サポートの形態を提供するために設定を表示する必要がある場合は、設定テーブルに読み取り専用でアクセスできるデータベースに設定を入れることは意味があります。

2

設定用のデータベースを使用する利点の1つは、実稼働中のWebサイトを中断することなく、状況を即座に変更できることです。

web.configファイルを変更すると、IIS上のワーカープロセスがリサイクルされ、アプリケーションが再起動されます。 InProcessセッションを使用している場合、それらは失われます。これにより、ウェブサイトのユーザーが混乱する可能性があります。

2

web.configの設定とデータベースレベルの両方の設定を組み合わせて使用​​します。

各設定について、次の質問をします。「この設定は、アプリケーションが実行されているマシンに固有ですか?」そうであれば、web.configに入ります。そうでない場合、追加の質問をします。「この設定が変更された場合、アプリケーションを強制的に再起動する必要がありますか?はいの場合、web.config。多くの場合、サービスレベル契約では再起動は受け入れられません。

私たちのアプリケーションのほとんどは、マルチテナントであり、かつ/またはウェブファームで実行されています。ローカルファイルシステムパス、ログレベル、データベース接続文字列などの単純なものはweb.configにあります。その理由は、それらがそのマシンに固有のリソースを処理するからです。

他のすべてがプログラムの実行に影響を与え、アプリケーション層とデータ層の両方にアクセスできる必要があります。また、他のアプリケーションでも必要になる傾向があります(複数のアプリケーションが同じデータベースにアクセスしたと仮定して)。

0

データベースを主張するユースケースの1つは、Webファームなどの負荷分散アプリケーションです。ファーム内の他のマシンとは異なる単一のマシンに関連する設定がいくつかありますが、それらはweb.configに入る必要がありますが、ファーム全体で同一であるはずの設定が多分あるはずです。ファームは外部から単一のアプリケーションのように見え、単一のマシンのように構成することができれば有益です。つまり、データベースのような共有リポジトリを意味します。

関連する問題