Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 什么时候应该将责任分配给服务而不是实体对象?_Oop_Design Patterns_Domain Driven Design - Fatal编程技术网

Oop 什么时候应该将责任分配给服务而不是实体对象?

Oop 什么时候应该将责任分配给服务而不是实体对象?,oop,design-patterns,domain-driven-design,Oop,Design Patterns,Domain Driven Design,什么时候应该将责任分配给服务对象而不是实体对象,这有什么经验法则吗?就我所知的领域驱动设计而言,实体对象是一些复杂数据的表示。很可能他们没有任何业务逻辑 所以,如果您正在考虑只保存数据的责任,那么它将进入实体对象。服务对象负责给定值或提供上下文的实体对象上的复杂逻辑 我认为这里没有经验法则。确定类的职责是设计OO软件的技巧 也就是说,你的课堂设计应该给你一些提示。例如,如果您计划创建一个方法作为实体的一部分,但该方法需要的数据不是实体的一部分,这将表明该方法在实体之上的级别上运行,可能是一个域服

什么时候应该将责任分配给服务对象而不是实体对象,这有什么经验法则吗?就我所知的领域驱动设计而言,实体对象是一些复杂数据的表示。很可能他们没有任何业务逻辑


所以,如果您正在考虑只保存数据的责任,那么它将进入实体对象。服务对象负责给定值或提供上下文的实体对象上的复杂逻辑

我认为这里没有经验法则。确定类的职责是设计OO软件的技巧


也就是说,你的课堂设计应该给你一些提示。例如,如果您计划创建一个方法作为实体的一部分,但该方法需要的数据不是实体的一部分,这将表明该方法在实体之上的级别上运行,可能是一个域服务。

当您需要在多个聚合根上运行时,请使用域服务

我需要一些指导,如您所提到的:“如果您计划创建一个方法作为实体的一部分,但该方法需要的数据不是实体的一部分,这将表明该方法在实体之上的级别上运行,可能是一个域服务。”谢谢。@mohsenkw您应该阅读蓝皮书或DDD快速版。这里已经解释清楚了。教科书中的例子是
TransferFunds()
不属于源或目标
Account
,而是属于
FundsTransferService
类。此外,沃恩·弗农的新书也非常优秀。当您使用DDD将其分解时,您可以拥有一个实体、一个值、一个聚合、一个工厂、一个存储库或一个服务。根据类不是什么,一个消除过程有助于确定其角色。