SpringMVC-体系结构-我的服务应该返回DTO吗?
我知道在这方面有很多意见,但我仍然不清楚 让我们举一个例子,假设我有一个SpringMVC-体系结构-我的服务应该返回DTO吗?,spring,model-view-controller,architecture,entity,dto,Spring,Model View Controller,Architecture,Entity,Dto,我知道在这方面有很多意见,但我仍然不清楚 让我们举一个例子,假设我有一个Customer实体和一个CustomerDTO 1) 我的是否应该保存和获取服务接受DTO并返回DTO?比如: CustomerDTO saveNew(CustomerDTO dto); CustomerDTO get(Long id); 2) 我的服务是否应始终管理客户对象,我的控制器是否应进行转换,例如: Customer saveNew(Customer c); Customer get(Long id);
Customer
实体和一个CustomerDTO
1) 我的是否应该保存
和获取
服务接受DTO并返回DTO?比如:
CustomerDTO saveNew(CustomerDTO dto);
CustomerDTO get(Long id);
2) 我的服务是否应始终管理客户
对象,我的控制器
是否应进行转换,例如:
Customer saveNew(Customer c);
Customer get(Long id);
我认为第二个更灵活,如果在另一个服务中我需要呼叫客户get(例如,在
用户
中设置它),我有客户
本身,我不需要转换它。但第一种方法似乎更解耦?一个好的MVC实践是每个视图有一个控制器,所以我们应该能够轻松地交换视图。假设有两个控制器处理域模型的两种不同表示(本例中为两种不同的DTO)。这两个控制器应该使用相同的服务,因此它们应该将相同的对象类型传递给服务,即Customer
。在我看来,服务
是业务逻辑层的一部分,应该与域模型一起工作,控制器
是表示层的一部分。为了回答您的问题,我同意第二个示例,因为它更尊重MVC模式。一个好的MVC实践是每个视图有一个控制器,因此我们应该能够轻松地交换视图。假设有两个控制器处理域模型的两种不同表示(本例中为两种不同的DTO)。这两个控制器应该使用相同的服务,因此它们应该将相同的对象类型传递给服务,即Customer
。在我看来,服务
是业务逻辑层的一部分,应该与域模型一起工作,控制器
是表示层的一部分。为了回答您的问题,我同意第二个示例,因为它更尊重MVC模式