我有一个语言表,用于 2 个字段 id 和 language_name。我可以将其视为值对象吗?
防爆记录: 1 EN 2 德国 3 TR
一旦这些值是不可变的,我想我就不需要给它们 Id 并使其成为直接在数据库中表示的实体。
您可以将它们视为值对象,但不必以 DDD 方式考虑所有内容。
根据马丁·福勒的定义:
当我们使用域模型时,我们使用它,因为它包含复杂的 域逻辑。将此域逻辑分类为:
验证:检查输入是否有意义以及对象是否正确 适合进一步行动。 后果:发起一些改变世界
状况的行动 推导:找出一些 基于我们已经拥有的信息的信息
ValueObject 擅长验证和派生。
另一方面,语言表通常用于解决 i18n 问题(ui/query conern(。一般来说,这里没有域逻辑。这种功能很容易以简单的 CRUD 风格实现,并且更适合如此。在 DDD 中考虑它们会添加许多约束,例如存储库只能返回聚合,或者您只能通过其聚合修改本地实体。例如,用户编辑产品,添加英文描述和德语描述。可以将产品建模为聚合,并将描述建模为值对象,但这不会增加太多价值,有时甚至很烦人(现在产品不能由英语编辑器和德语编辑器同时编辑以同时修改聚合(。
但是,如果产品聚合上有一些真实的域验证和派生呢?比如库存和定价。这就是剧中界限语境的由来。可以在 DDD 中建模库存/定价边界上下文,也可以在 CURD 中建模产品描述上下文。