使用ValueObjects

时间:2015-04-29 08:50:28

标签: design-patterns domain-driven-design

我正在使用实体框架(数据库优先和代码优先)进行开发。大多数时候,我在我的域模型中使用实体,映射到专用表。在DDD中,存在ValueObjects的概念,它应该没有标识并且应该是不可变的。根据您使用DDD的经验,您如何使用ValueObjects?这是一个从创建模型中出现的概念(例如,当它处理只读数据,参数......时)还是存在任何预期或可抵扣的战略行为,表明对象应该像ValueObject一样设计(或不),或应该是不可变的(或不是)?

1 个答案:

答案 0 :(得分:1)

正如Alexey告诉Entity Framework你有一个问题(可能在下一个版本中解决了)。要让EF填充您的属性,属性必须是公共的和可设置的。这使得无法将它们实现为值对象。应该增强EF,它可以加载(属性)私有属性或字段(例如DataContractSerializer甚至不使用任何构造函数)来启用它。 要使用EF接近值对象,您可以执行以下操作:

在EF中将值对象建模为[ComplexType]。然后它们不存储在自己的表中,但是字段嵌入在任何包含的实体表中。这接近于语义价值。

对于不变性,您可以让您的setter仅允许一组。缺点是不变性只能在运行时强制执行。另一种方法是为只有getter的类定义接口,并且只在dal之外使用这个接口。第三种方法是将EF类作为DTO使用,并将它们填充到域模型对象中(使用真值对象)。