我有2个字段id和language_name的语言表。我可以将此视为价值对象吗?
前记录:1 EN 2 DE 3 TR
只要这些值是不可变的,我想我不需要给它们ID并将其作为直接表示在数据库中的实体。
答案 0 :(得分:0)
您可以将它们视为值对象,但您不必以DDD方式考虑所有内容。
根据Martin Fowler的定义:
当我们使用域模型时,我们使用它,因为它包含复杂的 域逻辑。将此域逻辑分类为:
可能会有所帮助验证:检查输入是否有意义且对象是否正确 适合进一步行动。 后果:启动一些会改变世界状况的行动 推导:搞清楚一些 基于我们已有的信息的信息
ValueObject擅长验证和派生。
另一方面,语言表通常用于解决i18n问题(ui / query conern)。一般来说,这里没有域逻辑。这种特性很容易用简单的CRUD风格实现,并且更好。在DDD中考虑它们会添加许多约束,例如只有聚合可以由存储库返回,或者您只能通过它的聚合来修改本地实体。例如,用户编辑产品,添加英语描述和deutsch描述。人们可以将产品建模为聚合和描述作为价值对象,但这并没有增加太多的价值和吸引力(现在,产品不能由英国编辑和德意志编辑同时编辑,以便在聚合上进行并发修改)。
但是如果在产品聚合上有一些真正的域验证和派生怎么办?像库存和定价。这是有限的上下文出现在游戏中的地方。可以同时具有在DDD中建模的库存/定价有界上下文和在CURD中建模的产品描述上下文。