我可以在NET MVC控制器中使用静态缓存帮助器方法吗?
作者:互联网
我意识到有几篇关于在哪里添加缓存检查/更新以及控制器,模型和缓存代码之间关注点分离的文章.
我尝试过两个很棒的例子,但是它们是MVC的新手,我想知道哪一个最干净,最适合MVC方法论?我知道您需要考虑DI和单元测试.
示例1(带委托的Helper方法)
…在控制器中
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);
}
两者都使用静态缓存帮助器类,但是第一个示例使用带有传递的委托方法的方法签名,该委托方法具有要调用的存储库方法的名称.如果数据不在缓存中,则调用该方法,并且缓存帮助器类将处理对当前缓存的添加或更新.
在第二个示例中,缓存检查是存储库方法的一部分,其中有一行额外的代码来调用缓存帮助器add方法来更新当前缓存.
由于缺乏经验和知识,我不确定哪一个最适合MVC.我喜欢使用委托方法名称调用缓存帮助器的想法,以便删除存储库中的所有缓存代码,但是我不确定在控制器中使用静态方法是否理想?
第二个示例处理了上述内容,但现在缓存检查和存储库查找之间没有分隔.也许这不是问题,因为您知道它仍然需要缓存?
解决方法:
我有一个相当大的项目,我们在其中进行示例1-缓存静态类,其中包含从控制器使用的检索委托.实际上,在我们的案例中,我们有一个服务类层来处理缓存,而控制器则引用该服务层.服务层处理数据检索,缓存,权限检查等,而控制器则主要处理将服务中的数据组合到模型中.
根据您的问题,您不一定需要静态缓存帮助器.您可以使用DI注入缓存帮助器的实例,因此可以将其模拟出来进行测试等.
标签:caching,c,asp-net-mvc 来源: https://codeday.me/bug/20191210/2098488.html