0

私のチームは、現在ログインしているユーザーに固有のメニュー項目を含む上部メニュー構造を持ち、選択したメニュー項目のコンテンツを下に表示するMVC4アプリケーションを作成しています。メニューは部分ビュー「_MainMenu」に表示され、MainMenuControllerインデックスアクションはデータベースからメニューデータを取得し、メニュー部分ビューを返す役割を果たします。メインレイアウト"_Layout"は、@ Html.Action( "Index"、 "MainMenu")を呼び出してメニューをレンダリングします。

ページが更新されるたびにデータベースにアクセスしてメニュー構造データを取得することは避けたいと考えています。また、別のメニュー項目が選択されたときにメニュー構造が再表示されないようにすることも理想的です。

私はAJAXを調べていて、新しいメニュー項目を選択すると、メニューの下にその項目のコンテンツが読み込まれるように実装しました。これは、ID = "mainContent"のdivを部分ビューとしてのコンテンツに置き換えることによって行われます(このdivロードされたビュー「MainContent」に存在します)。このように、メニューが再ロードされることはなく、ページが完全に更新されることもありません(異なるメニュー項目が選択されると、異なる部分的なコンテンツビューのみがスワップインおよびスワップアウトされます)。

このソリューションは機能しますが、それが本当にベストプラクティスであるかどうか、またはキャッシュを含むより良いソリューションがあるかどうかはわかりません。AJAXソリューションの問題の1つは、URLが「http:// MySite/MainContent」から変更されないことです。これは、ブラウザの[戻る]ボタンをクリックしても期待どおりに機能せず、F5キーを押してブラウザページを更新すると、現在表示されているページが失われることを意味します。更新の問題は、選択したメニュー項目を覚えておくことでおそらく解決できますが、これがAJAXの使用目的であるとはまだ確信していません。

誰かが彼らの経験に基づいて、キャッシングがこのシナリオのより良い解決策であると思うかどうか教えてもらえますか?

4

1 に答える 1

0

ユーザーのメニュー項目が変更される可能性が低い場合は、単純な静的辞書 (long はユーザー ID) を使用してバックエンドにデータをキャッシュし、定期的に更新することができます。

一般に、キャッシュを行う場合は、基になるデータが更新されたときにキャッシュされたデータが更新されるようにする必要があります。したがって、DB にアクセスするアプリが 1 つしかない場合にのみ、シンプルで安全です。複数のアプリがある場合は、キャッシュの同期を維持するメカニズムを追加する必要があります。

私が取り組んでいるプロジェクトでは、User-Role-Module エンティティと関係を DB に保存し、モジュールのアクセス許可をユーザーではなくロールにバインドしました。ロールのアクセス許可は変更される可能性が低いため、安全にキャッシュできます。

于 2012-10-29T07:00:17.253 に答える