【发布时间】:2015-10-27 21:07:14
【问题描述】:
我正在寻找基于域驱动设计编写域服务的最佳(或更好)方法。这是伪代码
public class CustomerAccount
{
public string AccountNumber {get; set;}
public string CustomerName {get; set;}
public string PhoneNumber {get; set;}
public string HomeAddress {get; set;}
}
// Domain Service Class
public class AccountService
{
public virtual void RefreshAccount( CustomerAccount acct)
{
// Some code here to refresh the class from cache...
cache.refresh( acct )
}
}
public static class Cache
{
public static refresh(CustomerAccount acct)
{
// refreshing class here.
}
}
我的问题是我应该在 AccountService 中有 RefreshAccount() 并以这种方式调用它吗?还是直接调用缓存类?无论哪种方式都很好,但我的问题是,从设计的角度来看,尤其是 DDD,哪种方式最好,为什么?
提前致谢!!
【问题讨论】:
-
什么是
Cache?它是域中的某个术语吗?还是只是出于性能原因用于减少 I/O 的缓存? -
@Jakub 是的,这是另一个域。
-
缓存通常属于基础设施层,而不是领域层。域服务本身不需要了解有关缓存的任何信息(除非缓存确实是您的域的一部分),它是客户端(或某些中间应用程序服务)来查询缓存。此外,如果您需要基于某个域事件从缓存中驱逐数据,则该域需要公开该事件,并且可以通知客户端(例如缓存服务)并采取相应的行动。
-
我同意@haim770。如果这是域功能,您可能希望直接调用域服务而不是 缓存。然而,因为它看起来确实像基础设施,所以缓存可能会驻留在 应用程序 服务中,在这种情况下,考虑到
static,它实际上并不重要。如果您可以摆脱静态,而是将缓存注入您的应用程序服务,那就更好了:) -
感谢大家的cmets!真的很有帮助!
标签: c# domain-driven-design software-design