所有 类 都包含业务逻辑、域对象吗?

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 entitiesAggregate roots(一种 Domain entity)、Value objectsDomain services.

因为你的 东西 没有 Identity 它们不可能是 Domain entitiesAggregate roots。可以在 Value objectsDomain services 内进行计算。 Value objects 包含与值相关的特定行为,因此很可能 您的计算是使用 Domain services.

实现的

根据我的经验,并非每个域 class 都必须是 DDD 构建块,它们可以只是 class 提取出来以实现更好的可维护性、单一职责原则(一般来说是 SOLID)等

我会说您的计算可以很好地适合值对象或域服务。

如何区分?好吧,我将域服务理解为具有业务逻辑(例如您的计算)的服务(嗯,很明显),需要注入某种外部依赖性才能使您的逻辑正常工作。

另一方面,如果您可以将该业务逻辑命名为业务概念(即 CustomerFee, CustomerCommission, 等)并且您不需要任何注入的依赖项来使其工作我会说它是一个值对象。

例如,假设您想计算预订价格,这取决于您向客户收取的费用(以及其他参数):

ReservationPrice(CustomerFee customerFee, ItemPrice ItemPrice)

现在你的 CustomerFee 也是基于(比如任何变量)某些东西计算出来的。

通过这种方式,您可以仅使用值对象对计算进行建模,这样您就可以在代码中显示它们所依赖的所有不同业务概念。此外,任何查看您的代码和文件结构的人都可以了解您正在计算的内容。

一个简单的测试可以问以下问题 -

您的“计算器”(如您所说)是否将计算结果保持为不可变状态? — 如果答案是肯定的,那么它就是一个值对象。

“计算器”是无状态的,只公开接受请求和returns计算结果的“计算”行为吗? — 如果答案是肯定的,那么它是一个服务,但是,这个服务返回的“结果”可能被归类为值对象。