WinForms应用程序数据缓存 - 要缓存哪个层?

时间:2009-02-27 15:46:46

标签: vb.net winforms caching theory

我们每晚都会在与我的应用数据库位于同一实例的数据库中更新数据。因此,为了节省数据库调用,我想将这个静态数据缓存到List(Of MyObject)中。从理论的角度来看,这个缓存的List(Of)是否应该通过全局变量缓存在表示层代码中?它应该是.DLL中的全局变量吗?

我正在思考.DLL,因为我创建了一个服务层,它公开地暴露给GUI并调用.DLL中的数据访问层:

Public Shared Function Search(ByVal criteria As Core.Other.Customer) As List(Of Core.Other.Customer)
    ' TODO: Check the customer cache to see if it has been populated yet. If not, populate it.
    If 1 = 1 Then
        ' TODO: Variable "list" needs to be a global object in the DLL.
        ' For SO readers: Dal class declared Friend.
        Dim list As List(Of Core.Other.Customer) = Dal.Search.Customers.GetCache()
    End If

    Dim results As New List(Of Core.Other.Customer)
    ' TODO: Find the relevant customers in the cache and add them to variable "results".
    Return results
End Function

我能以最好的方式解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

我倾向于将此缓存在您的服务层中。我喜欢保持我的数据访问简单(通常使用像NHibernate这样的OR / M)所以我不想做任何可能改变我对数据访问层如何工作的期望的事情(作为开发人员,我希望所有调用DAL实际命中数据库,而不是缓存,除非它是OR'M的缓存,这是我不关心的实现细节)。

该服务似乎是合适的地方(当我缓存数据时,我在我的应用程序中执行此操作,如果这有帮助的话)。

答案 1 :(得分:2)

您的List(Of x)是否需要进行任何处理,还是只是从数据库中提取原始数据?

如果只是从数据库中提取原始数据,最好将其缓存在数据访问层。

但是如果它需要处理,那么它应该在业务逻辑层

中完成

既然您指的是演示代码和.DLL,那么您的意思是n-tier architecture吗?

答案 2 :(得分:0)

您可以考虑在没有缓存的情况下执行此操作,并查看是否存在性能/网络问题。这可能是过早的优化?