EF Core 实体上 DDD 的业务请求实现
Business Requests implementation on DDD on EF Core entities
我正在为我的实体的业务规则验证而苦苦挣扎。
我需要做的是每个实体都能够根据一组特定的业务规则评估其状态。
我有一个这样的实体:
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
}
目前,我有一个要求,即电子邮件在所有系统用户中应该是唯一的。
每个实体都有其预定义的一组规则,并且应该能够独立评估其中的每一个。
我想知道将一些验证服务注入包含 Validate() 之类方法的实体是否是个好主意
我应该在实体中添加这些验证 class 还是应该将该服务注入上层并在将新的 Person 添加到 DbContext 之前调用验证方法?
直接在数据库中放置 unique email
约束可获得最佳性能。使用 EF Core 属性,您需要将 Unique
属性放在 Email
字段上方。
否则,您应该密切关注 table 更新。您可能需要使用时间戳等解决方案检查对数据库记录的并发访问。
对于DDD来说,是有规律可循的。 域层 必须独立于其他层。因此,如果位于领域层的实体依赖于验证等服务,则违反了规则。
应用层负责通过 EF 实现的类似 PersonRepository
检查重复的电子邮件。检查此类验证后,您可以创建 Person
.
的实例
订购服务中的验证 eShopOnContainers 对您来说是一个有用的示例。
我正在为我的实体的业务规则验证而苦苦挣扎。 我需要做的是每个实体都能够根据一组特定的业务规则评估其状态。 我有一个这样的实体:
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
}
目前,我有一个要求,即电子邮件在所有系统用户中应该是唯一的。 每个实体都有其预定义的一组规则,并且应该能够独立评估其中的每一个。 我想知道将一些验证服务注入包含 Validate() 之类方法的实体是否是个好主意 我应该在实体中添加这些验证 class 还是应该将该服务注入上层并在将新的 Person 添加到 DbContext 之前调用验证方法?
直接在数据库中放置 unique email
约束可获得最佳性能。使用 EF Core 属性,您需要将 Unique
属性放在 Email
字段上方。
否则,您应该密切关注 table 更新。您可能需要使用时间戳等解决方案检查对数据库记录的并发访问。
对于DDD来说,是有规律可循的。 域层 必须独立于其他层。因此,如果位于领域层的实体依赖于验证等服务,则违反了规则。
应用层负责通过 EF 实现的类似 PersonRepository
检查重复的电子邮件。检查此类验证后,您可以创建 Person
.
订购服务中的验证 eShopOnContainers 对您来说是一个有用的示例。