2

私は MVC 3 で構築したシステムを持っています。これは現在、システムが AppSettings として web.config に保存されている日付に関連付けられた 7 つの深刻な手順を実行する年次提出サイクルを提供します。ただし、毎年、エンド ユーザーに対応するために、前のステップ間でシステムをロールバックする必要があります。管理者が開発者に連絡しなくてもシステムの状態を制御できるようにしたいと考えています。これを行う最善の方法は何ですか?

管理者が日付を設定できる適切な検証を備えたページを作成する予定です。これらの日付を保存する方法についていくつかのオプションを検討しましたが、どれも正しくないようです。私たちの許可システム全体がこれらの日付を使用し、ページ上のさまざまなテキストは、現在の期間に基づいてオンとオフを切り替えます.

これまでのところ、次の 2 つのオプションを考え出しました。

オプション 1: データベース テーブルを作成する– これが私の最初の考えでした。global.asax の MvcApplication クラスにプロパティを設定し、データベースから取得しました。遅延ローダーを使用して、初めて必要になったときにプロパティを設定できます。ただし、データベースで変更された場合、システムを強制的に「リセット」して日付の変更を読み取る方法がありません。Begin_Request() でこのアクションを実行すると、静的コンテンツであるかどうかに関係なく、Web ブラウザーがサーバー上で開く各ファイルのプロパティを常に開き、プロパティをリセットします。

日付のいずれかが必要になるたびに、データベースから日付を直接取得できますが、データベース呼び出しの繰り返しを減らすために多くの機能をやり直す必要があります。各リクエストの日付をキャッシュして、必要なときにのみ取得したいのですが、

オプション 2: アプリケーションを介して構成ファイルを編集できるようにする – web.config ファイルを分割する方法を調べたので、appSettings だけを含む別のファイルを作成できます。次に、コントローラーのアクションから新しい構成ファイルを更新するだけです。これはうまく機能し、既存の機能を書き直す必要はないと思いますが、コードに悪い設計パターンを導入しているように感じます.

4

4 に答える 4

3

私はデータベースに投票します。パフォーマンスのために、これらのパラメーター値をアプリ内の静的クラスにキャッシュし、同じクラスで DB から再読み取りするメソッドを提供できます。そう:

  1. ユーザーがリクエストを行ったら、それらのプロパティが既にキャッシュされているかどうかを確認します。ある場合 - キャッシュされた値を使用し、ない場合 - DB から読み取ります
  2. 管理者がこれらのパラメーターに変更を加えたら、それらをデータベースに保存し、静的キャッシュ クラスを適用して DB から再読み取りします。
于 2012-05-25T21:38:41.517 に答える
2

設定がデータベースに保存されているか、キーと値のペアが構成ファイルに保存されているかを気にしないアプローチをお勧めします。

すべてのユーザーが設定にグローバルにアクセスできるようにするため、設定をキャッシュできます。キャッシュの実装は汎用的で分散されている必要があります。このようなインターフェイスを作成する方法については、オンライン リソースがたくさんあります。

キャッシュを基になるデータと同期させたいので、キャッシュの依存関係を設定する必要があります (AppFabric は SQL キャッシュの依存関係をサポートしません。このスレッドを参照してください。NCacheは SQL とファイルの両方をサポートしています)。

于 2012-05-31T07:29:44.647 に答える
2

値をデータベースに保存し、分散キャッシュを使用して Web ファーム全体でデータを永続化します。MS AppFabricキャッシングは私にとってはうまく機能しました。標準のキャッシュ パターンを実装する必要があります (db から null をロードしてキャッシュに挿入する場合は、キャッシュをチェックしてください)。おそらく、このロジックを抽象化する静的な Load() メソッドを作成するだけです。管理者がデータベースを更新すると、キャッシュを更新するか、単にキャッシュキーを削除できます。

于 2012-05-30T17:16:59.900 に答える
1

その他、パフォーマンスに追加する考慮事項があります。つまり、構成ファイルを変更した場合、アプリケーション プールは再初期化されますが、データベース ソリューションではアプリケーションの再初期化は発生しません ...したがって、変更後にアプリを再初期化する必要がありますか? ...回避する方法がない場合アプリケーションへの大幅な変更を伴わない初期化 ptobably config filr ソリューションの方が優れている

于 2012-05-31T17:37:20.287 に答える