2009-05-12 3 views
3

Nous allons transférer une application Windows héritée vers une application Web volumineuse pour un marché vertical. En regardant MVC. Chaque implémentation peut avoir de 50 à 5000 utilisateurs. En regardant mettre la navigation dans la page principale. L'application contiendra de 200 à 300 éléments de menu, résultant en plus de 500 vues. Nous voulons afficher un menu de navigation réduit pour chaque utilisateur en fonction de leurs autorisations d'application. Un utilisateur peut voir seulement 20 articles, ou tous disponibles.Menu piloté par la base de données d'applications Web MVC par les autorisations utilisateur

La plupart des messages que j'ai vus suggèrent de passer des éléments de navigation à la page maître via viewdata, établie dans une classe de contrôleur de base. Je comprends ça. Chacun des utilisateurs potentiels de 10 à 1000 aura un ensemble d'autorisations différent.

Quelqu'un a-t-il des solutions qui éviteront de cliquer sur la base de données pour obtenir les éléments du menu de l'utilisateur sur chaque requête de contrôleur héritée du contrôleur de base?

Y a-t-il un schéma de mise en cache qui fonctionnera pour chaque utilisateur?

La navigation doit-elle être gérée dans un cadre (ce n'est pas mon choix)?

Est-ce juste un prix que nous paierons pour cette approche de la navigation?

Merci pour toute contribution!

Répondre

1

Vous pouvez commencer par caching linq queries, ce qui serait un bon moyen d'y remédier au niveau DB. Faire cela dans MVC en utilisant un filtre d'action ne serait pas trop dur non plus.

J'ai implémenté quelque chose comme ça en PHP il y a un an mais l'idée générale est la même. Tout d'abord, vous devrez attribuer à chaque configuration de menu un identifiant unique. De cette façon, lorsque l'utilisateur A et l'utilisateur X demandent la même configuration de menu, il se résout dans le même fichier de cache.

La première fois qu'un menu doit être chargé pour l'utilisateur, il est chargé à partir de la base de données et transmis à l'utilisateur. Simultanément, il est enregistré dans un fichier cache avec l'identifiant unique dans son nom. Lors de requêtes ultérieures, le filtre d'action peut charger les données du fichier de cache s'il existe et contourner la base de données.

+0

Merci pour la réponse. Je suis en train de mettre en place une application de test pour l'essayer. –

1

Quelques idées:

1.) Vous pourriez avoir votre barre de navigation html proviennent d'un Html.RenderAction (MVC Futures) et utiliser le cache de sortie sur ce point.

2.) Vous pouvez générer le code HTML pour la barre de navigation par utilisateur, puis enregistrez-le dans la base de données et régénérez-le si les autorisations de l'utilisateur changent. Donc, tout ce que vous devez faire est de tirer le code HTML de la base de données contre chaque enregistrement d'utilisateur.

+0

Merci, j'ai pensé à l'option 2 car nous avons stocké html dans le db à d'autres fins. Je vais devoir essayer cela aussi. Si je stocke le html dans la base de données, il semble que je peux faire un html.renderpartial, puis mettre en cache le partiel? –

Questions connexes