领域驱动设计服务
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
确实属于域,如果没有有关域的更多信息,很难回答这个问题。
总的来说:
- 如果
Cache
和 CustomerAccount
是同一聚合的一部分,则应从聚合根访问 Cache
。
- 如果它们不是同一个聚合但仍然属于同一个限界上下文,则使用域服务来执行需要
CustomerAccount
和 Cache
的操作。
- 如果
Cache
属于另一个限界上下文,使用域事件通知它。
如果可能,我建议更改 UL 中 Cache
的名称。这可能会引起您团队中程序员之间的误解,尤其是当新人加入团队时。
我正在寻找基于领域驱动设计编写领域服务的最佳(或更好)方法。这是伪代码
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
确实属于域,如果没有有关域的更多信息,很难回答这个问题。
总的来说:
- 如果
Cache
和CustomerAccount
是同一聚合的一部分,则应从聚合根访问Cache
。 - 如果它们不是同一个聚合但仍然属于同一个限界上下文,则使用域服务来执行需要
CustomerAccount
和Cache
的操作。 - 如果
Cache
属于另一个限界上下文,使用域事件通知它。
如果可能,我建议更改 UL 中 Cache
的名称。这可能会引起您团队中程序员之间的误解,尤其是当新人加入团队时。