在哪里实现缓存 - 类库或 Windows 服务

Cra*_*rge 5 c# caching windows-services

我有一个 Windows 服务,它使用计时器定期调用类库(在工作线程上)。该类库具有所有必需的应用程序功能,而 Windows 服务只不过是一个简单的托管环境。作为其执行的一部分,库需要调用数据库并获取一堆记录。这些记录不会经常更改(想想几周),我想将它们缓存在内存中。我应该在类库还是Windows服务中实现缓存结构?

本质上我有点不确定的是,一旦 Windows 服务加载,然后定期调用此类库,该库运行的应用程序域对于该库的所有执行是否保持不变(通过每隔几个时间运行一个工作线程)分钟)。因为如果不是,那么在库内实现缓存的目的似乎毫无意义。

有人可以帮助我理解这一点吗?

das*_*ght 1

这是一个有效的设计问题,但我认为您从错误的角度来处理它:不要考虑应用程序域和其他可能使您更难实现功能的事情,而是从以下角度考虑它属于哪里逻辑设计。

以下是一些可能会影响您的想法的注意事项:

  • 您的类库向其用户呈现特定的界面。对于所有调用您的类库的用户来说,将其置于内存缓存层后面是否有意义?如果这个问题的答案是“是”,那么缓存功能就属于类库。
  • 由于类库是一个单独的实体,因此您可能希望对库的客户隐藏一些实现细节,例如窗口的服务。如果服务要将数据缓存一段时间,那么服务将知道数据很少更改。如果不希望出现这种情况,请将缓存功能放入类库中。
  • 如果数据本质上可以比您正在编写的特定 Windows 服务更频繁地更改,则缓存属于 Windows 服务。
  • 如果您计划将来实现控制缓存状态的附加功能,例如强制缓存失效的方法,那么该功能属于 Windows 服务(尽管您也可以将其放入类库中,并且给予其用户对其状态的明确控制)。