1

我们在与我的应用程序数据库位于同一实例的数据库中拥有每晚更新的数据。因此,为了节省数据库调用,我想将此静态数据缓存到 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

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

4

3 回答 3

3

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

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

于 2009-02-27T16:10:20.960 回答
2

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

如果它只是从数据库中提取的原始数据,那么将其缓存在数据访问层可能是个好主意。

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

由于您指的是演示代码和 .DLL,您是否碰巧指的是n 层架构

于 2009-02-27T15:54:13.777 回答
0

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

于 2009-02-27T15:50:05.020 回答