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