gpt4 book ai didi

domain-driven-design - DDD。我可以将我的值对象迁移到实体吗?

转载 作者:行者123 更新时间:2023-12-04 08:21:11 24 4
gpt4 key购买 nike

所以我尝试以 DDD 方式重构重写我的应用程序。这是一个简单的应用程序,包含 3 个类:

  • 配置(名称)
  • 环境(名称)
  • 属性(键)

我用它来查看和编辑每个环境的配置文件。一个配置可以被视为一张表格,其中Property为行,Environment为列。

此时,Configuration 是一个实体,EnvironmentProperty 是值对象。但现在我要实现 us ecase,以将 Value 设置为给定 EnvironmentProperty。我的第一个想法是这个:

class Configuration(name) {
environments = SetOf[Environment]
properties = SetOf[Property]

setValue(property, environment, value) {
knowEnv = environments.get(environment)
knowEnv.setValue(property, value)
}
}

class Environment(name) {
properties = MapOf[Property, Value]

setValue(property, value) {
properties[property] = value
}
}

但是这样做会将我的环境从值对象更改为实体。所以我开始思考(太多)并且很难找到“最佳”解决方案。这就是为什么我来这里问各位专家,你们将如何实现这个用例。

谢谢

最佳答案

从您发布的内容来看,听起来确实每个环境都是一个具有身份的独特事物。我猜您的环境可能是平台或开发环境?所以它可能应该是一个实体。

听起来确实好像您的环境可以独立于其他任何内容进行编辑、使用、创建等。在这种情况下,它可能不应该作为另一个聚合的一部分存在,因此它应该是它自己的聚合根(即使它只是一个实体)。因此它会有自己的存储库。这一点在 Evans DDD 书中并不明显,但实体本身被视为聚合根(仅由一个对象组成)。

如果您希望从另一个聚合根引用环境,则可以通过其唯一 ID 来引用它(而不是作为对象引用)。然后,您需要另一种技术/方法来检索这些环境

这似乎违背了以数据为中心的旧教条,但您可以做各种各样的事情,例如缓存您的环境的数据(因为数量可能有限,而且它们可能不经常更改)或使用 CQRS。

关于domain-driven-design - DDD。我可以将我的值对象迁移到实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284044/

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