c# - DDD - 如何强制执行不变量但特定于客户要求?

标签 c# domain-driven-design encapsulation strategy-pattern invariants

我正在尝试弄清楚如何使项目的一些消费者(业务客户)的不变量保持一致,他们对同一版本的聚合根有自己的要求。 让我们以客户为例,提出假设性问题以满足以下愚蠢的逻辑:

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/

相关文章:

c# - 在 VB 中读取 XML

c# - 监视器似乎没有锁定对象

c# - 在下拉列表中显示层次结构

nhibernate - DDD : Should everything fit into either Entity or Value Object?

c# - DTO 与领域模型、项目组织

c++ - 编写 C++ API - 如何保持对 API 内部对象的外部引用?

java - 接受默认序列化时封装如何被破坏?

c# - 只解析部分xml

user-interface - 命令/应用层映射的用例 : Implementation

java - 我应该为永远不会改变的字段值使用访问器吗?