我正在尝试弄清楚如何使项目的一些消费者(业务客户)的不变量保持一致,他们对同一版本的聚合根有自己的要求。 让我们以客户为例,提出假设性问题以满足以下愚蠢的逻辑:
public class Customer
{
public Id { get; private set;}
public string Name { get; private set;}
public void SetName(string name){
//client1 -> requires the name not to be null
//client2 -> requires the name can start with "J"
//client3 -> some other business logic
this.Name = name;
}
}
现在,我想到的是像这样自定义验证/不变检查策略逻辑:
public void SetName(string name, INameCheckStrategy strategy){
if(!strategy.IsSatisfiedBy(name)) throw new BusinessException("name does not meet the invariant check!");
this.Name = name;
}
在哪里
public class Client1NameCheckStrategy : INameCheckStrategy {
public bool IsSatisfiedBy(string name){
return name != null;
}
}
任何想法如何处理这样的问题?
最佳答案
您可以采用某种 DDDD(“动态域驱动设计”,创造一个短语)方法,将域中的规则具体化为它们自己的聚合,并将它们与客户端相关联。如果您要对更改规则进行建模,这可能会使事情变得有趣(您如何处理使聚合被先前规则视为有效的更改?)。
关于c# - DDD - 如何强制执行不变量但特定于客户要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67361588/