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

Domain driven design 所有类都包含业务逻辑、域对象吗?,domain-driven-design,microservices,business-logic,Domain Driven Design,Microservices,Business Logic,因此,对于是否将某个对象调用为域对象(并最终将该类放置在域包下),我几乎没有疑问 我有一个微型服务,其职责是进行一些计算(不涉及实际的业务需求,它所做的只是根据给定的请求计算一些利息回报)。现在,为了实现计算,需要进行某些子计算,因此这些子计算分为不同的类。但是是的,这些计算不需要在DB中持久化,它们也没有ID(因此肯定不是实体或聚合)。然而,这些单独的计算器类(由于缺乏术语)确实包含一些复杂的业务逻辑。现在,我的问题是,这些单独的类是否仍然限定/分类为域对象,还是应该称为服务 如果需要的话,可

因此,对于是否将某个对象调用为域对象(并最终将该类放置在域包下),我几乎没有疑问

我有一个微型服务,其职责是进行一些计算(不涉及实际的业务需求,它所做的只是根据给定的请求计算一些利息回报)。现在,为了实现计算,需要进行某些子计算,因此这些子计算分为不同的类。但是是的,这些计算不需要在DB中持久化,它们也没有ID(因此肯定不是实体或聚合)。然而,这些单独的计算器类(由于缺乏术语)确实包含一些复杂的业务逻辑。现在,我的问题是,这些单独的类是否仍然限定/分类为域对象,还是应该称为服务

如果需要的话,可以自由要求更多关于用例的澄清

干杯

现在,我的问题是,这些单独的类是否仍然限定/分类为域对象,还是应该称为服务

从DDD的角度来看,在域层中,可以使用类实现以下术语:
域实体
聚合根
(一种
域实体
),
值对象
域服务

因为您的东西没有
标识
,所以它们不能是
域实体
聚合根
。可以在
值对象
域服务
中进行计算<代码>值对象包含与值相关的特定行为,因此最可能的计算是使用
域服务实现的


根据我的经验,并非每个域类都必须是DDD构建块,它们可能只是为了更好的可维护性而提取的类、单一责任原则(一般来说是可靠的)等等。

我想说,您的计算可以很好地适用于价值对象或域服务

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

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

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

现在,您的
CustomerFee
也基于(比如说任何变量)某些内容进行计算


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

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

您的“计算器”(如您所指)是否将计算结果保持为不可变状态如果答案是“是”,则它是一个值对象


“计算器”是否是无状态的,并且只公开接受请求并返回计算结果的“计算”行为如果回答是“是”,则它是一项服务,但是,此服务返回的“结果”可能被归类为值对象。

这些计算在您的域中扮演什么角色?您可能有非常复杂的基础结构算法,但复杂性并不是域逻辑的同义词。它不仅仅是计算的复杂性。在场景中,计算行为会发生变化,这取决于业务逻辑。这有帮助吗?我也更倾向于将它们归类为
值对象
,因为在业务逻辑上,它们的行为会发生变化(阅读多态实现)。然而,我目前的理解是,值对象或多或少是由
域对象
本身组成的,这反过来意味着我的
域对象
将是其中之一(我试图实现的最终结果)。这种方法听起来好吗?@NayabSiddiqui多态性可以帮助
值对象
域服务
值对象
更多地关注值、数据、状态及其对自身数据的行为(如金融领域中的货币、数学中的点数、身份验证中的用户名等),并且
域对象
对作为参数接收的输入数据应用行为。如果你能描述你的领域,也许我们可以确定最匹配的DDD模式的类型。感谢你的输入@constantin galbenu,我认为将它们称为
域服务
,你的分类指南肯定会有所帮助,因此将其标记为答案。
ReservationPrice(CustomerFee customerFee, ItemPrice ItemPrice)