域驱动设计服务

时间:2015-10-27 21:07:14

标签: c# domain-driven-design software-design

我正在寻找基于域驱动设计编写域服务的最佳(或更好)方法。这是伪代码

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,哪种方式最好,为什么?

提前致谢!!

2 个答案:

答案 0 :(得分:2)

Cache听起来很像基础设施层的一部分,而不是域。如果是这种情况,则应将其从域图层中删除。域模型不应受到技术复杂性的污染。

假设Cache确实属于域名,如果没有关于域名的更多信息,很难回答这个问题。

一般来说:

  • 如果CacheCustomerAccount是同一聚合的一部分,则应从聚合根访问Cache
  • 如果它们不是相同的聚合但仍属于相同的有界上下文,请使用域服务执行同时需要CustomerAccountCache的操作。
  • 如果Cache属于另一个有界上下文,请使用域事件通知它。

如果可能,我建议更改UL中Cache的名称。这可能会导致团队中程序员之间产生误解,尤其是当新人加入团队时。

答案 1 :(得分:0)

DDD和测试驱动开发通常是相辅相成的,因此从TDD的角度来看,您希望保持它的方式并避免直接调用静态刷新方法;否则将很难正确地进行单元测试。