2009-01-22 9 views
3

Je crée un portail où de nombreux sites fonctionneront avec la même application MVC. J'ai une liste de sites stockés dans le HttpRuntime.Cache. Est-ce mal d'accéder au cache via une méthode statique? Est-ce que je devrais plutôt passer ce sur les données de vue?Dans ASP.Net MVC, utilise des méthodes statiques pour rechercher des objets mis en cache sur les mauvaises vues?

Par exemple, est-ce mal sur la vue:

Lorsque le code SiteHelper est:

public class SiteHelper { 
private static object @lock = new object(); 
private const string siteKey = "FelixSites"; 

public static Site CurrentSite { 
    get { 
     var context = HttpContext.Current.Wrap(); 
     var sites = context.Cache[siteKey] as Site[]; 
     if (sites == null) { 
      lock (@lock) { 
       if (sites == null) { 
        sites = SiteService.GetSites(); 
        context.Cache[siteKey] = sites; 
       } 
      } 
     } 
     return sites.Single(s => s.Domain == context.Request.UrlReferrer.AbsoluteUri); 
    } 
} 

}

Répondre

2

La seule raison pour laquelle il peut être mauvais d'utiliser l'électricité statique La propriété brise la séparation des préoccupations entre votre point de vue et votre modèle. Le modèle devrait être le seul concerné par la façon dont les données sont récupérées - même à partir d'objets qui sont dans le même domaine d'application.

Bien qu'il puisse sembler exagéré de présenter ces données à la vue via ViewData, c'est vraiment la meilleure pratique car elle préserve la séparation des préoccupations. Plus vous préserverez activement cette séparation, mieux votre application traitera le refactoring et les corrections de bugs sur la route.

Questions connexes