值对象没有同一性。 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,但它为我工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top