gpt4 book ai didi

domain-driven-design - 标准值类型作为 DDD 中的 ValueObjects?

转载 作者:行者123 更新时间:2023-12-01 09:45:38 26 4
gpt4 key购买 nike

在对具有实体和值对象的域进行建模时,将“基本”值类型与定义好的值对象一起创建是否有意义?

例如,我可以有一个值对象 EmailAddress 或 ProductName。但是仅将 String 作为值对象呢?它是否出于任何充分的理由违反了任何已知的原则?我真正想知道的是,我是否应该/可以将所有可能的属性值定义为值对象,包括 string、bool、int 等。这是错误的还是只是做得很远?不知何故,我觉得我更愿意真正明确地表达任何具有某种值(value)的“事物”,而不是留下任何可以解释的东西。你怎么看?大师们对此有何看法?

我偶然发现的一个 reference :

It's often a good idea to replace common primitives, such as strings, with appropriate value objects. While I can represent a telephone number as a string, turning into a telephone number object makes variables and parameters more explicit (with type checking when the language supports it), a natural focus for validation, and avoiding inapplicable behaviors (such as doing arithmetic on integer id numbers).

最佳答案

DDD 中的值对象是一件很棒的事情,它们是不可变的,因此它们可以安全地传递,它们以一种很好的 OOP 模式(如果您使用 OOP)包含数据及其行为。它们还使隐式显式并提供强类型。

如果您需要上述任何功能,那么您应该为需要它的任何属性创建一个 Value 对象(类、组件……无论您的语言是否存在)。

但是,如果您不需要上述任何一项,那么您不应该这样做。您不会因为某些“大师”这样说而创建新类,例如 every property of an Aggregate should be a Value object

最重要的方面是,如果您有一些具有数据和行为的属性,并且您需要为它创建一个类,那么该类应该是一个 Value 对象,特别是,它应该是不可变的(实体除外)。

关于domain-driven-design - 标准值类型作为 DDD 中的 ValueObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49510034/

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