Domain driven design ddd-我的服务是域服务还是应用程序服务?

Domain driven design ddd-我的服务是域服务还是应用程序服务?,domain-driven-design,Domain Driven Design,我很难确定我正在创建的服务是域服务还是应用程序服务。在我读的《PHP中的域驱动设计》一书中,有人说应用程序服务就像“用户注册请求”,访问存储库并验证用户是否存在。但是,他们使用相同的示例将其实现为域服务,因此我无法区分两者 我的情况如下:我正在创建一个动态页面生成器。一个页面包含许多块,这些块都是基块的子类。基本块的每个子类都有自己的业务规则,允许用户自定义其设计(基本上,它应该返回一个表单,每个块不同) 我从用例“用户希望向页面添加[特定块]开始” 我想知道这是域服务还是应用程序服务。非常感谢

我很难确定我正在创建的服务是域服务还是应用程序服务。在我读的《PHP中的域驱动设计》一书中,有人说应用程序服务就像“用户注册请求”,访问存储库并验证用户是否存在。但是,他们使用相同的示例将其实现为域服务,因此我无法区分两者

我的情况如下:我正在创建一个动态页面生成器。一个页面包含许多块,这些块都是基块的子类。基本块的每个子类都有自己的业务规则,允许用户自定义其设计(基本上,它应该返回一个表单,每个块不同)

我从用例“用户希望向页面添加[特定块]开始”


我想知道这是域服务还是应用程序服务。非常感谢您的任何帮助

您的应用程序服务通常负责编排用例,并执行从持久性加载/保存聚合之类的操作

i、 e.类似于:

public void SomeUseCase()
{
     var aggregate = _repository.Load(someId);
     aggregate.ApplySomeBehaviour(someDomainService);
     _repository.Save(aggregate);
}
而域服务则更为特定于域行为,例如RateCalculator——一些不符合聚合概念但包含需要在域中捕获的行为的对象


您的应用程序服务通常负责编排用例,并执行从持久性加载/保存聚合之类的操作

i、 e.类似于:

public void SomeUseCase()
{
     var aggregate = _repository.Load(someId);
     aggregate.ApplySomeBehaviour(someDomainService);
     _repository.Save(aggregate);
}
而域服务则更为特定于域行为,例如RateCalculator——一些不符合聚合概念但包含需要在域中捕获的行为的对象


可能重复的

您所说的“以相同的示例将其实现为域服务”到底是什么意思?我不确定一本自尊心很强的DDD书怎么会不能解释如此根本的区别。你确定你读对了吗?关于DDD中服务的一篇好文章:这本书采用了完全相同的示例:“用户想要注册”,并首先将其实现为应用程序服务,然后实现为域服务。然而,我似乎误解了这一点。你的文章帮了大忙,谢谢!也许应用程序服务在书中调用了域服务?事实上不是,它在做完全相同的事情,但方式不同。应用程序1正在使用DTO,而域应用程序1正在使用原始数据,并检查其他一些东西(密码有效性)。您所说的“以相同的示例将其实现为域服务”到底是什么意思?我不确定一本自尊心很强的DDD书怎么会不能解释如此根本的区别。你确定你读对了吗?关于DDD中服务的一篇好文章:这本书采用了完全相同的示例:“用户想要注册”,并首先将其实现为应用程序服务,然后实现为域服务。然而,我似乎误解了这一点。你的文章帮了大忙,谢谢!也许应用程序服务在书中调用了域服务?事实上不是,它在做完全相同的事情,但方式不同。应用程序1使用DTO,而域应用程序1使用原始数据,并检查一些其他内容(密码有效性),使其更加清晰,谢谢!那就更清楚了,谢谢!