Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringMVC-体系结构-我的服务应该返回DTO吗?_Spring_Model View Controller_Architecture_Entity_Dto - Fatal编程技术网

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模式