实体和DTO对DDD始终是强制性的

时间:2016-10-19 08:11:30

标签: domain-driven-design

我是Domain Driven Design的新手。目前我有大约5个bean,它们之间有层次结构。严格来说,豆类是DTO。但是我会将它们从域层返回到服务层和控制器。这对我来说一直很好,但是根据Domain Driven Design,Domain层必须返回BO并且服务必须返回控制器将映射到DTO的DTO或BO。我没有看到这一点,因为最后我将服务返回的对象转换为JSON,这只是数据。所以我真的有必要拥有单独的BO和DTO。

请注意,我有一个无状态业务对象,它可以执行特定业务功能的所有操作,并根据需要返回多个DTO。请告知我是否走在正确的道路上。

1 个答案:

答案 0 :(得分:0)

  

对我来说,分开BO和DTO是非常有必要的。

必要吗?不,DDD警察不会来敲你的门。

分离关注点的原则告诉我们应该区别对待它们。

业务对象是模型的一部分;他们负责确保模型中的数据满足业务不变性。

DTO(或更准确 - 您的陈述)是API的一部分;它们是与语言无关的消息,可以与其他应用程序共享。

这里的一个关键想法是,由于业务对象是模型的一部分,我们希望能够积极地改变它们以满足业务需求。但是,对于我们需要稳定性的API而言,情况并非如此,因此我们不需要在每次优化业务模型时重写客户端代码。

另一个观点是,您的表示应该跨越信任边界,其中您的业务对象用于强制执行它。 Andreas Hallberg对此(slides)

进行了很好的讨论
  

但在这种情况下,我看到有一个没有逻辑的业务对象

这听起来很像你陷入了anemic domain model的陷阱。我建议你再次审查你的材料;如果您担心模型中有太多实体与数据库通信,那么您在某处丢失了该图:域模型根本不与数据库通信。