gpt4 book ai didi

nhibernate - BDD/DDD 将基本实体验证规范放在哪里?

转载 作者:行者123 更新时间:2023-12-03 13:05:51 26 4
gpt4 key购买 nike

或者,基本实体验证是否被视为规范?

一般来说,在实际实体中还是在规范之外保留基本实体验证(名称不能为 null 或空,日期必须大于 xxx)更好?

如果在规范中,它会是什么样子?您会为每个字段制定规范,还是将其全部包含在一个 EntityIsValid 类型规范中?

最佳答案

在我看来,一旦人们对 DDD 有所了解,他们就会选择规范模式,并希望将其应用到任何地方。这确实是 Golden Hammer 反模式。

我看待规范模式的方式,以及我理解的方式 Domain-Driven Design ,是当您需要独立于实体改变业务规则时可以选择应用的设计模式。

请记住,DDD 是一种迭代方法,因此您不必在第一次尝试时就“正确”完成。我将从将基本验证放入实体开始。这非常符合 OOD 的基本思想,因为它让表示概念的对象知道数据的有效范围。

在大多数情况下,您甚至不需要显式验证,因为实体应该设计为将约束表示为不变量,这样就不可能创建违反约束的实例。

如果您有一条规定 Name 不能为 null 或空的规则,您可以直接在您的实体中主动强制执行它:

public class MyEntity
{
private string name;

public MyEntity(string name)
{
if(string.IsNullOrEmpty(name))
{
throw new ArgumentException();
}
this.name = name;
}

public string Name
{
get { return this.name; }
set
{
if(string.IsNullOrEmpty(value))
{
throw new ArgumentException();
}
this.name = value;
}
}
}

name 不能为 null 的规则现在是类的不变量:MyEntity 类现在不可能进入违反该规则的状态。

如果稍后您发现规则更复杂,或者在许多不同概念之间共享,您始终可以将其提取到规范中。

关于nhibernate - BDD/DDD 将基本实体验证规范放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com