gpt4 book ai didi

linq-to-sql - ASP.NET MVC - 有没有一种简单的方法可以将数据缓存添加到我的服务层?

转载 作者:行者123 更新时间:2023-12-01 04:17:12 25 4
gpt4 key购买 nike

我已经连接了我的 MVC 应用程序,以便存储库层查询 LINQ to SQL 类,服务层查询存储库层,并且 Controller 调用服务层。

基本上我的代码如下

存储库

    Public Function GetRegions() As IQueryable(Of Region) Implements IRegionRepository.GetRegions
Dim region = (From r In dc.Regions
Select r)
Return region.AsQueryable
End Function

服务
    Public Function GetRegionById(ByVal id As Integer) As Region Implements IRegionService.GetRegionById
Return _RegionRepository.GetRegions() _
.Where(Function(r) (r.ID = id _
And r.isActive)) _
.FirstOrDefault()
End Function

Public Function GetRegionByNameAndParentID(ByVal region As String, ByVal parentid As Integer) As Region Implements IRegionService.GetRegionByNameAndParentID
Return _RegionRepository.GetRegions() _
.Where(Function(r) (r.Region = region _
And r.ParentID = parentid _
And r.isActive)) _
.FirstOrDefault()
End Function

Public Function GetActiveRegions() As List(Of Region) Implements IRegionService.GetActiveRegions
Return _RegionRepository.GetRegions() _
.Where(Function(r) r.isActive) _
.ToList
End Function

Public Function GetAllRegions() As List(Of Region) Implements IRegionService.GetAllRegions
Return _RegionRepository.GetRegions().ToList
End Function

我想知道是否有一种很好/有效的方法可以将缓存添加到服务层,这样如果调用相同,它就不必总是调用 REPO。

最佳答案

由于缓存是一个横切关注点(在 Wikipedia 中进行搜索),因此您可以使用策略注入(inject)在存储库层上实现缓存,但限制是您使用诸如 CaSTLe、Unity 等 DI 框架......这个概念的优势是您在存储库层中保留干净的代码。

我将从It Depends开始,但在不需要与其他服务代理交互的简单场景中,只建议缓存对数据库的访问,因为数据库访问是最慢的。这就是为什么我建议不要缓存对服务层的访问,而是缓存存储库层。这也是 Martin Fowler 在他的数据映射器模式中所描述的。

如果您处于分布式场景中,您的 Controller 和服务在不同的服务器上运行,您可能会选择缓存在您的 Controller 上,以防止每次加载时引用数据的序列化,例如您的国家/地区列表下拉列表或税码值。

在您的场景中,我会将 CachingHandler 附加到您的存储库 GetRegions(),并制作一个 CacheKey,它结合了例如方法和参数(如果有)。在一种简单的方法中,将 CacheKey 和结果列表保存到 Hashtable(在现实生活中,使用 Patterns & Practices Caching 应用程序 block 或 System.Web.Cache),以及对存储库的每个请求,查看缓存键是否为在您的 Hashtable 中,然后返回缓存列表。

在 google 中快速搜索可以让您开始:
http://entlib.codeplex.com/Thread/View.aspx?ThreadId=34190

关于linq-to-sql - ASP.NET MVC - 有没有一种简单的方法可以将数据缓存添加到我的服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com