其他分享
首页 > 其他分享> > 我可以在NET MVC控制器中使用静态缓存帮助器方法吗?

我可以在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