gpt4 book ai didi

domain-driven-design - 值与实体对象(领域驱动设计)

转载 作者:行者123 更新时间:2023-12-03 05:06:52 24 4
gpt4 key购买 nike

我刚刚开始阅读DDD。我无法完全理解实体与值对象的概念。有人可以解释当值对象被设计为实体对象时系统可能面临的问题(可维护性、性能......等)吗?例子会很棒...

最佳答案

简化为本质区别,身份对于实体来说很重要,但对于值对象来说并不重要。例如,某人的姓名是一个值对象。 Customer 实体可能由客户名称(值对象)、List OrderHistory(实体列表)以及可能的默认地址(通常是值对象)组成。客户实体将有一个 ID,每个订单将有一个 ID,但名称不应有;一般来说,无论如何,在对象模型中,地址的身份可能并不重要。

值对象通常可以表示为不可变对象(immutable对象);更改值对象的一个​​属性本质上会破坏旧对象并创建一个新对象,因为您不像关心内容那样关心身份。正确地,只要对象的属性与另一个实例的属性相同,Name 上的 Equals 实例方法就会返回“true”。

但是,更改诸如客户之类的实体的某些属性并不会破坏客户;而是会破坏客户。 Customer 实体通常是可变的。身份保持不变(至少在对象被持久化后)。

您可能在没有意识到的情况下创建了值对象;每当您通过创建细粒度类来表示实体的某些方面时,您都会获得一个值对象。例如,类 IPAddress 对有效值有一些限制,但由更简单的数据类型组成,将是一个值对象。 EmailAddress 可以是一个字符串,也可以是一个具有自己的行为集的值对象。

即使在数据库中具有标识的项目也很可能在对象模型中没有标识。但最简单的情况是一些有意义的属性的组合。当您可以将 Customer.FirstName、Customer.LastName、Customer.MiddleInitial 和 Customer.Title 组合在一起作为 Customer.Name 时,您可能不希望将它们组合在一起;当您考虑持久性时,它们可能是数据库中的多个字段,但您的对象模型并不关心。

关于domain-driven-design - 值与实体对象(领域驱动设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com