Я понимаю, что было несколько сообщений о том, где добавить проверку / обновление кэша и разделение проблем между контроллером, моделью и кодом кэширования.
Есть два замечательных примера, с которыми я пытался работать, но будучи новичком в MVC, мне интересно, какой из них самый чистый и лучше всего подходит методологии MVC? Я знаю, что вам нужно учитывать DI и юнит-тестирование.
Пример 1 (вспомогательный метод с делегатом)
... в контроллере
var myObject = CacheDataHelper.Get(thisID, () =>
WebServiceServiceWrapper.GetMyObjectBythisID(thisID));
Пример 2 (проверка наличия кэша в классе модели) в контроллере
var myObject = WebServiceServiceWrapper.GetMyObjectBythisID(thisID));
затем в классе модели ..............
if (!CacheDataHelper.Get(cachekey, out myObject)) {
//do some repository processing
// Add obect to cache CacheDataHelper.Add(myObject, cachekey);
}
Оба используют класс вспомогательного статического кэша, но в первом примере используется сигнатура метода с переданным методом делегата, который имеет имя вызываемого метода репозитория. Если данные не находятся в кэше, вызывается метод, и класс помощника кэша обрабатывает добавление или обновление текущего кэша.
Во втором примере проверка кэша является частью метода репозитория с дополнительной строкой для вызова метода добавления вспомогательного кэша для обновления текущего кэша.
Из-за недостатка опыта и знаний я не уверен, какой из них лучше всего подходит для MVC. Мне нравится идея вызова помощника кеша с именем метода делегата, чтобы удалить любой код кеша в хранилище, но я не уверен, идеально ли использовать статический метод в контроллере?
Второй пример имеет дело с вышеупомянутым, но теперь нет разделения между проверкой кэширования и поиском в репозитории. Возможно, это не проблема, поскольку вы знаете, что в любом случае это требует кэширования?