Dow*_*pel 6 dns caching domain-driven-design
在遵循域驱动设计的应用程序中,您可以使用以下类型的概念
通常你会把缓存代码放到一个昂贵的数据库调用?
我已经看到代码库只是缓存在整个地方,很难监控内存使用情况,很难为其他开发人员提供指导.
请理解我知道您应该只在需要时缓存数据,我只是问一般问题.
Mar*_*ann 10
抽象存储库的精彩之处在于,您可以使用Decorator模式来实现缓存等交叉问题.
例如,给定一个IMyRepository接口,您可以像这个伪代码一样创建一个MyCachingRepository:
public class MyCachingRepository : IMyRepository
{
private readonly IMyRepository repository;
public MyCachingRepository(IMyRepository repository)
{
if(repository == null)
{
throw new ArgumentNullException("repository");
}
this.repository = repository;
}
public Foo SelectFoo(int id)
{
Foo foo = ... // attempt to get foo from cache
if // foo is not it cache
{
foo = this.repository.SelectFoo(id);
// save foo in cache
}
return foo;
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,GetFoo由IMyRepository定义.请注意,如果缓存找不到该项,则仅调用装饰的存储库.
这遵循Single Resposibility Principle,因为真正的缓存实现可以专注于检索和保存数据,而缓存装饰器可以专注于缓存.这使您可以彼此独立地改变两者.
在我们当前的项目中,我们使用了这种方法,更令人感到特别的是,我们可以在事先没有触及原始存储库的情况下做到这一点.这是开放/封闭原则的精神.