【问题标题】:Domain driven design value object, how to ensure a unique value领域驱动设计值对象,如何保证唯一值
【发布时间】:2010-06-01 17:48:03
【问题描述】:

我正在构建一个问卷创建器。问卷由部分组成,部分由页面组成,页面由问题组成。问卷是总根。

部分、页面和问题可以有所谓的短代码,它们在问卷中应该是唯一的(但在数据库中不是唯一的,因此它们不是严格的身份)。我打算使短代码成为一个值对象,并希望在调查问卷中包含它应该是唯一的业务规则,但我不确定如何确保这一点。我的理解是值对象不应该访问存储库或服务层,那么它如何确定它是否是唯一的?

感谢您的帮助。

达伦

【问题讨论】:

  • 您的“简码”是生成的还是系统的输入?这将改变答案。即,如果我输入一个在任何地方都不存在的新短代码,它会被插入吗?但是,通常,通过服务层驱动您的输入。该服务可以调用来构建聚合并验证它是唯一的。如果它是唯一的,则允许插入/更新。如果不是,请不要让它发生。域在域对象以及调用它们的服务中是分层的。您的业​​务逻辑将根据您的工作范围存在于不同的位置。

标签: domain-driven-design ddd-repositories value-objects


【解决方案1】:

您可以将生成简码的职责分配给问卷汇总。它可以基于嵌入到问卷对象中的简单计数器。每个想要创建简码的实体都会调用其包含问卷的 NextShortCode() 方法来获取下一个唯一(在当前问卷范围内)简码值。

【讨论】:

    【解决方案2】:

    显然,您需要在数据库中添加一个 PK 字段。如何实现取决于您,但如果是我,我会将 PK 字段携带到您的值对象中,以便自动处理。

    【讨论】:

      【解决方案3】:

      您可能希望使用 Guid 或 UUID 之类的东西。不过,具体如何生成取决于您的应用程序使用的语言。

      【讨论】:

        猜你喜欢
        • 2015-02-27
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        相关资源
        最近更新 更多