gpt4 book ai didi

c# - 如何跨同一实体的实例实现实体验证

转载 作者:行者123 更新时间:2023-11-30 16:40:28 24 4
gpt4 key购买 nike

在我们的项目中,我们使用 DDD 作为架构(整洁的架构)。假设我有一个名为 A 的实体。A 有一个名为 B 的属性。现在我想要验证当创建第二个实体 A 时,B 在商店中的所有 A 实例中必须是唯一的。

我的想法是使用存储库为其实现域服务。那么问题是这个域服务是否应该自己实现验证或者只是为其提供数据......(用于交互器/用例中进行验证)。

示例代码(代码保持简单):

public class A
{
public A(string b)
{
B = b;
}

public string B {get; private set;}
}

最佳答案

Let's say I have an entity called A. A has a property called B. Now I want a validation that when a second entity A is created, that B must be unique over all instances of A in a store.

您尝试解决的问题有时称为 set validation .

简单的答案:您引入一个索引,它跟踪每个值 B 到允许拥有它的特定实体 A 的映射。

当然,这会引起争用;您需要缓解同时修改两个不同 A 的情况。索引和 A 的所有 成为需要管理的单个一致性边界的一部分。当我们将实体存储在单个 RDBMS 中时,这几乎就是发生的情况——我们可以引入约束以确保没有重复项。

您可以将该单一一致性边界拆分为单独的 A 实体,以及单独的 B->A 实体。但是现在您可能会遇到尝试同时修改两个不同的一致性边界的问题,这会引入竞争条件。

第三种可能性是放宽一致性约束——允许存储冲突,并在以后解决它们。参见,例如,Greg Young on warehouse systems和 Udi Dahan 在 race conditions .

来自 的通常答案是真正坚决反对该要求,以确保它是真实的:如果违反约束,企业的实际成本是多少?

想想飞机座位图:显然只有一名乘客坐在一个座位上。但这并不意味着将座位分配给多个人是严重的失败,因为人工运算符(operator)(登机口代理)有办法缓解这些问题。另请参阅 Greg Young 的演讲 Stop Over Engineering .

关于c# - 如何跨同一实体的实例实现实体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327406/

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