假设我的业务层目前包含一堆DTO和单独的服务类,可以与数据存储库进行通信。
示例:
class PersonService
{
IPersonRepository _personRepository;
ILogging _logger;
ICacheStorage _cache;
// Constructor here to create concrete objects.
public Person GetPersonById(int Id)
{
// error logging and caching here???
}
}
在此层记录和缓存是否有意义?或者,应用服务层处理这些问题会更有意义吗?或者可能还有别的东西?
答案 0 :(得分:3)
可以或应该尽可能地实施缓存。缓存也应该是透明的,因此任何使用它的人都不应该知道它是实际使用的。大多数情况下,将它放在数据访问层中是合乎逻辑的,但有时将它放在业务层中也是合乎逻辑的。
记录是IMO的东西,不属于任何层。它应该是应用程序范围内的一个访问点。
答案 1 :(得分:2)
日志记录和跟踪作为实用程序类实现,并在您的体系结构的大多数或所有层中调用。缓存实现因层和系统而异。您可以在不同的层具有不同类型的缓存和缓存策略,并且它完全取决于所讨论的系统。您可以使用进程内和分布式缓存的组合来实现所需的性能和一致性特征。
答案 2 :(得分:1)
我想说缓存是数据检索的实现细节。就PersonService而言,它有一个可以用来获取其数据的PersonRepository。它可能在内存或DB中的事实是一个它不需要关心的细节。因此,我说数据访问层中的缓存会失效。
至于日志记录,可以在任何地方和任何地方。记录真的没有“错误”的地方。 (这就是为什么它通常被视为“交叉问题”以及为什么人们会使用AOP进行日志记录,请参见此处的讨论:Advice on AOP with C#)