是否可以将语言查找表视为值对象

时间:2013-09-25 09:51:44

标签: entity-framework domain-driven-design value-objects

我有2个字段id和language_name的语言表。我可以将此视为价值对象吗?

前记录:1 EN            2 DE            3 TR

只要这些值是不可变的,我想我不需要给它们ID并将其作为直接表示在数据库中的实体。

1 个答案:

答案 0 :(得分:0)

您可以将它们视为值对象,但您不必以DDD方式考虑所有内容。

根据Martin Fowler的定义:

  

当我们使用域模型时,我们使用它,因为它包含复杂的   域逻辑。将此域逻辑分类为:

可能会有所帮助      

验证:检查输入是否有意义且对象是否正确   适合进一步行动。   后果:启动一些会改变世界状况的行动   推导:搞清楚一些   基于我们已有的信息的信息

ValueObject擅长验证和派生。

另一方面,语言表通常用于解决i18n问题(ui / query conern)。一般来说,这里没有域逻辑。这种特性很容易用简单的CRUD风格实现,并且更好。在DDD中考虑它们会添加许多约束,例如只有聚合可以由存储库返回,或者您只能通过它的聚合来修改本地实体。例如,用户编辑产品,添加英语描述和deutsch描述。人们可以将产品建模为聚合和描述作为价值对象,但这并没有增加太多的价值和吸引力(现在,产品不能由英国编辑和德意志编辑同时编辑,以便在聚合上进行并发修改)。

但是如果在产品聚合上有一些真正的域验证和派生怎么办?像库存和定价。这是有限的上下文出现在游戏中的地方。可以同时具有在DDD中建模的库存/定价有界上下文和在CURD中建模的产品描述上下文。