これらの値は構成ファイルまたはデータベースに属しますか?
-
03-07-2019 - |
質問
「モジュール」ごとにASP.NETのconfigSectionsセクションに格納されている値が複数あります。それらがこれらのファイルにさえ属しているのかどうか疑問に思っていました。
背景は次のとおりです。これらはデプロイされたWebアプリケーションの複数のインスタンスです。すべて同じデータベースを使用しますが、独自の設定があります。
私は、開発と本番の違いが設定ファイルにあると確信しています。知っておくべき値には、接続文字列、使用するプロバイダー、デバッグの設定などがあります。
すべての共通部分を、独自のルールとメソッドを使用してクラスに分解しました。残った部分は、各サイトの各モジュールのその他の設定です。不明なオプションには次のものがあります:
- ModuleAの場合、オプションの表示/非表示
- ModuleBの場合、このフィールドに使用される用語は何ですか
- ModuleCの場合、エンドユーザーにXアクションの実行を許可する
解決
うーん、これらはapp.configを変更せずにアプリケーションの実行時に変更できるようにしたいように聞こえます。私が従うことをお勧めする経験則の1つは、構成内のすべてのものがデプロイメントまたはサーバー構成用でなければならないということです。この場合、設定はアプリケーションの動作を変更しているように見えるので、たぶん努力しなければDBに移動するでしょう。
他のヒント
ModuleAとModuleCは、ユーザープロファイル情報のように聞こえます。ユーザーによって動的ではないが、後で機能を追加できる場合は、DBに移動する可能性があります。
ModuleBがDBに配置されるアプリも作成しました。フォームラベルなどは、DBに簡単に入れられます。後日、誰かがすべてのフォームラベルにコロンを追加または削除することにした場合、すべてのテキストがDBに保存されていれば、それは非常に簡単なことです。
いずれかの値を編集する必要がある場合は、状況を考慮してください。
値がweb.configにある場合、そのファイルへの変更を保存すると、アプリがリサイクルされ、現在のユーザーが不便に捨てられます。アプリが営業時間中にのみ使用されるイントラネット上にある場合は、それほど問題にはなりません(ただし、夜遅くまで仕事をしている人から怒った電話を受けることもあります)。しかし、国際的なユーザーがいる公開Webサイトでは潜在的に問題があります。
値がデータベース内にある場合、その方法でアプリの処理に影響はありません。
どちらの方法でも、値がアプリのRAMにキャッシュされているかどうかを検討してください(web.configはそうです)。データベース値はアプリケーション変数にありますか、それともキャッシュにありますか?その場合、変更がいつ行われるかわからない場合があります。アプリを再起動する場合を除きます。
そして、適切な管理者が変更を行うために必要なアクセスと許可は何ですか?誰かがweb.configを変更するにはWebサーバーにアクセスし、それを変更するにはデータベース(およびテーブル)にアクセスする必要があります。
いくつかの質問:アプリケーションの複数のインスタンスに同じDBを使用する理由と、それがメンテナンスにどのように影響するのか? 将来、パフォーマンスを改善するためにデータベースを分割するオプションになりますか?構成モデルは、DBベースのものよりもその変更をサポートしていますか?
言い換えれば、質問に答えるために多くの変数を考慮する必要があります:-)