领域驱动设计服务

Domain-Drive-Design service

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

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() 并以这种方式调用它?还是直接调用缓存class?无论哪种方式都可以正常工作,但我的问题是,从设计的角度来看,尤其是 DDD,哪种方式最好,为什么?

提前致谢!!

DDD 和测试驱动开发通常是齐头并进的,因此从 TDD 的角度来看,您需要保持原样,避免直接调用静态刷新方法;否则很难正确地进行单元测试。

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

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

总的来说:

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

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