В ASP.Net MVC использование статических методов для поиска кэшированных объектов в представлениях является плохой практикой? - PullRequest
3 голосов
/ 22 января 2009

Я создаю портал, на котором многие сайты будут работать с одним и тем же приложением MVC. У меня есть список сайтов, хранящихся в HttpRuntime.Cache. Это неправильно для доступа к кешу статическим методом? Должен ли я вместо этого передавать это при просмотре данных?

Например, это неправильно в представлении:

Где код для SiteHelper:

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);
    }
}

}

1 Ответ

2 голосов
/ 22 января 2009

Единственная причина, по которой использование статического свойства может быть плохим, заключается в том, что нарушается разделение проблем между вашим представлением и моделью. Модель должна быть единственной, касающейся того, как извлекаются данные - даже из объектов, находящихся в одной области приложения.

Хотя показ этих данных представлению через ViewData может показаться излишним, на самом деле это лучшая практика, поскольку она сохраняет разделение интересов. Чем больше вы активно сохраняете это разделение, тем лучше ваше приложение будет обрабатывать рефакторинг и исправлять ошибки в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...