所有 类 都包含业务逻辑、域对象吗?
Are all the classes containing business logic, domain objects?
所以我对是否将某些东西称为域对象(并最终将 class 放在域包下)几乎没有疑问。
我有一个微服务,它的职责是做一些计算(没有进入实际的业务需求,它所做的只是根据给定的请求计算一些 return 的兴趣集)。现在要实现计算,需要进行某些子计算,因此分别由不同的 classes 组成。但是,是的,这些计算不需要保存在 DB 中,它们也没有 ID(因此绝对不是实体或聚合)。然而,这些单独的计算器 classes(由于缺乏术语)确实包含一些复杂的业务逻辑。现在,我的问题是,这些单独的 classes 仍然 qualify/classify 作为领域对象还是应该被称为服务?
如有需要,请随时询问有关用例的更多说明。
干杯!
Now, my question is, do these individual classes still qualify/classify as domain objects or should they be referred to as services
从 DDD 的角度来看,在域层中,可以使用 classes 实现以下术语:Domain entities
、Aggregate roots
(一种 Domain entity
)、Value objects
和 Domain services
.
因为你的 东西 没有 Identity
它们不可能是 Domain entities
或 Aggregate roots
。可以在 Value objects
或 Domain services
内进行计算。 Value objects
包含与值相关的特定行为,因此很可能 您的计算是使用 Domain services
.
实现的
根据我的经验,并非每个域 class 都必须是 DDD 构建块,它们可以只是 class 提取出来以实现更好的可维护性、单一职责原则(一般来说是 SOLID)等
我会说您的计算可以很好地适合值对象或域服务。
如何区分?好吧,我将域服务理解为具有业务逻辑(例如您的计算)的服务(嗯,很明显),需要注入某种外部依赖性才能使您的逻辑正常工作。
另一方面,如果您可以将该业务逻辑命名为业务概念(即 CustomerFee,
CustomerCommission,
等)并且您不需要任何注入的依赖项来使其工作我会说它是一个值对象。
例如,假设您想计算预订价格,这取决于您向客户收取的费用(以及其他参数):
ReservationPrice(CustomerFee customerFee, ItemPrice ItemPrice)
现在你的 CustomerFee
也是基于(比如任何变量)某些东西计算出来的。
通过这种方式,您可以仅使用值对象对计算进行建模,这样您就可以在代码中显示它们所依赖的所有不同业务概念。此外,任何查看您的代码和文件结构的人都可以了解您正在计算的内容。
一个简单的测试可以问以下问题 -
您的“计算器”(如您所说)是否将计算结果保持为不可变状态? — 如果答案是肯定的,那么它就是一个值对象。
“计算器”是无状态的,只公开接受请求和returns计算结果的“计算”行为吗? — 如果答案是肯定的,那么它是一个服务,但是,这个服务返回的“结果”可能被归类为值对象。
所以我对是否将某些东西称为域对象(并最终将 class 放在域包下)几乎没有疑问。
我有一个微服务,它的职责是做一些计算(没有进入实际的业务需求,它所做的只是根据给定的请求计算一些 return 的兴趣集)。现在要实现计算,需要进行某些子计算,因此分别由不同的 classes 组成。但是,是的,这些计算不需要保存在 DB 中,它们也没有 ID(因此绝对不是实体或聚合)。然而,这些单独的计算器 classes(由于缺乏术语)确实包含一些复杂的业务逻辑。现在,我的问题是,这些单独的 classes 仍然 qualify/classify 作为领域对象还是应该被称为服务?
如有需要,请随时询问有关用例的更多说明。
干杯!
Now, my question is, do these individual classes still qualify/classify as domain objects or should they be referred to as services
从 DDD 的角度来看,在域层中,可以使用 classes 实现以下术语:Domain entities
、Aggregate roots
(一种 Domain entity
)、Value objects
和 Domain services
.
因为你的 东西 没有 Identity
它们不可能是 Domain entities
或 Aggregate roots
。可以在 Value objects
或 Domain services
内进行计算。 Value objects
包含与值相关的特定行为,因此很可能 您的计算是使用 Domain services
.
根据我的经验,并非每个域 class 都必须是 DDD 构建块,它们可以只是 class 提取出来以实现更好的可维护性、单一职责原则(一般来说是 SOLID)等
我会说您的计算可以很好地适合值对象或域服务。
如何区分?好吧,我将域服务理解为具有业务逻辑(例如您的计算)的服务(嗯,很明显),需要注入某种外部依赖性才能使您的逻辑正常工作。
另一方面,如果您可以将该业务逻辑命名为业务概念(即 CustomerFee,
CustomerCommission,
等)并且您不需要任何注入的依赖项来使其工作我会说它是一个值对象。
例如,假设您想计算预订价格,这取决于您向客户收取的费用(以及其他参数):
ReservationPrice(CustomerFee customerFee, ItemPrice ItemPrice)
现在你的 CustomerFee
也是基于(比如任何变量)某些东西计算出来的。
通过这种方式,您可以仅使用值对象对计算进行建模,这样您就可以在代码中显示它们所依赖的所有不同业务概念。此外,任何查看您的代码和文件结构的人都可以了解您正在计算的内容。
一个简单的测试可以问以下问题 -
您的“计算器”(如您所说)是否将计算结果保持为不可变状态? — 如果答案是肯定的,那么它就是一个值对象。
“计算器”是无状态的,只公开接受请求和returns计算结果的“计算”行为吗? — 如果答案是肯定的,那么它是一个服务,但是,这个服务返回的“结果”可能被归类为值对象。