我知道这其中有很多意见,但我仍然不清楚。
让我们举个例子来问它,假设我有一个Customer
实体和一个CustomerDTO
.
1( 我的save
和get
服务是否应该接受 DTO 并返回 DTO?喜欢:
CustomerDTO saveNew(CustomerDTO dto);
CustomerDTO get(Long id);
2( 我的服务是否应始终管理Customer
对象,并且我的Controller
进行转换,例如:
Customer saveNew(Customer c);
Customer get(Long id);
我认为第二个更灵活,然后如果在另一个服务中我需要调用客户 get(例如,将其设置为User
(,我有Customer
本身,我不需要转换它。但似乎第一种方法更加脱钩?
一个好的 MVC 实践是每个视图有一个控制器,因此我们应该能够轻松交换视图。假设我们有两个控制器为我们的域模型处理两种不同的表示(在本例中为两个不同的 DTO(。这两个控制器应使用相同的服务,因此它们应将相同的对象类型传递给服务,即Customer
。在我看来,service
是业务逻辑层的一部分,应该与领域模型一起使用,而controller
是表示层的一部分。为了回答你的问题,我同意第二个例子,因为它更尊重MVC模式。