Spring MVC - 架构 - 我的服务是否应该返回DTO?

时间:2017-07-04 17:52:38

标签: spring model-view-controller architecture entity dto

我知道这里有很多意见,但对我来说仍然不清楚。

让我们举一个例子,假设我有一个Customer实体和一个CustomerDTO

1)我的saveget服务是否应该接受DTO并返回DTO?像:

CustomerDTO saveNew(CustomerDTO dto);

CustomerDTO get(Long id);

2)我的服务是否应始终管理Customer个对象,我的Controller进行转换,例如:

Customer saveNew(Customer c);

Customer get(Long id);

我认为第二个更灵活,然后如果在另一个服务中我需要调用客户获取(例如,在User设置它)我有Customer本身和我不需要转换它。但似乎第一种方法更加分离?

2 个答案:

答案 0 :(得分:1)

一种好的MVC做法是每个视图只有一个控制器,因此我们应该能够轻松交换视图。假设我们有两个控制器为我们的域模型处理两种不同的表示形式(在这种情况下为两种不同的DTO)。这两个控制器应使用相同的服务,因此它们应将相同的对象类型传递给服务,即Customer。我认为service业务逻辑层的一部分,应与域模型一起使用,而controller表示层的一部分。要回答您的问题,我同意第二个示例,因为它更尊重MVC模式。

答案 1 :(得分:-2)

不,它不能wotk。如果你想要这些作品,你必须定义它们。 您可以使用存储库默认方法: 为了保存 repo.save(客户); 为了得到 repo.getOne(ID);

您可以使用@Query注释来定义自定义查询。