DDD,值对象和ORM
-
09-09-2019 - |
题
值对象没有同一性。 ORM需要身份来更新数据库。
如何欺骗ORM?
(标记为值对象ID作为内部不会工作,因为ORM生活在不同的组装并将其移动到相同的组件是不能接受的)。
预先感谢。
解决方案
至于我的DDD的理解去价值的物品只是分割你的实体的方式。如果一个值对象应该被存储在数据库中的ID它不是一个值对象。
示例:强>
域模型看起来像这样(C#):
public class Customer : Entity
{
public Guid CustomerID { get; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address : ValueObject
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
在相应的数据库表将看起来像这样(伪SQL):
CREATE TABLE Customers
(
CustomerID,
LastName,
HomeAddress_Street,
HomeAddress_City,
HomeAddress_ZipCode,
)
要存储的地址在一个单独的表,你将使它具有ID的实体。
其他提示
当埃里克·埃文斯谈到“实体具有的身份,价值对象不”,他不是在谈论数据库中的ID列 - 他在谈论身份作的概念的
。VOs的无概念同一性。这并不意味着他们不应该的持久的身份。不要让持久性实现蒙蔽了你的实体VS虚拟组织的理解。
请参阅我的文章 href="https://stackoverflow.com/questions/679005/how-are-value-objects-stored-in-the-database">。
我个人有值对象Id字段 - 我把它当作值对象的其他属性(例如,名称,位置等)。
这可能不是真的DDD,但它为我工作。
不隶属于 StackOverflow