Spring DTO-DAO(资源 - 实体)映射在哪个应用层:Controller或Service?

Tik*_*ksi 8 java architecture spring spring-mvc spring-hateoas

我正在编写一个Spring(4.1.7)Web应用程序,该应用程序公开RESTful服务,并希望使用DTO"资源"对象在Controller和客户端浏览器之间进行通信,而不是公开我的持久性实体.

目前,该应用程序具有以下层:

  • 查看(JSP/JSON)
  • 控制器(一个或多个)
  • DAO(@Service)
  • DAO(@Repository)

我的问题是,我应该将DAO实体映射到DTO资源?我看了一下用一些例子Spring HATEOAS,它们显示Resource延长对象ResourceSupport的映射Controller.这是最好的方法,还是我应该从DAO服务返回资源?

我想补充Link的元素返回的资源(为自己和相关的资源),但看不出Link是否在处理的元素将得到解决Service,而不必知识它Controller和它的@RequestMapping.另一方面,我不知道Controller将映射弄乱是否也是一种好的做法.

Mor*_*Adi 5

DTO(数据传输对象)的名称很明显,用于将数据从应用程序中传输出去。在您的情况下,放置它们的最佳位置是您的控制器层。您仅应将DTO公开给UI,当您从UI获取数据时,应将其转换为业务实体并调用下面的层。原因是,通过这种方式,您可以自由更改业务实体,而不会破坏UI并带来更好的维护。同样,出于相同的原因,您的业务/ DAO层也应该不了解UI和DTO。因此,在应用程序中将DTO转换为业务实体(反之亦然)的最佳位置是控制器层。

PS:也看看推土机 ;)