【发布时间】:2019-05-26 17:53:06
【问题描述】:
正如标题所示,设计服务层时的最佳做法是什么?我确实理解服务层应该始终返回一个 DTO,以便将域(实体)对象保留在服务层中。但是控制器的服务层输入应该是什么?
下面我提出了三个我自己的建议:
方法一: 在这种方法中,域对象(Item)被保存在服务层中。
class Controller
{
@Autowired
private ItemService service;
public ItemDTO createItem(IntemDTO dto)
{
// service layer returns a DTO object and accepts a DTO object
return service.createItem(dto);
}
}
方法二: 这是服务层接收自定义请求对象的地方。我在 AWS Java SDK 和 Google Cloud Java API 中广泛看到了这种模式
class Controller
{
@Autowired
private ItemService service;
public ItemDTO createItem(CreateItemRequest request)
{
// service layer returns a DTO object and accepts a custom request object
return service.createItem(request);
}
}
方法三: 服务层接受 DTO 并返回域对象。我不喜欢这种方法。但它在我的工作场所被广泛使用。
class Controller
{
@Autowired
private ItemService service;
public ItemDTO createItem(CreateItemRequest request)
{
// service layer returns a DTO object and accepts a DTO object
Item item = service.createItem(request);
return ItemDTO.fromEntity(item);
}
}
如果上述三种方法都不正确或不是最好的方法,请告诉我最佳做法。
【问题讨论】:
-
我不确定这个问题是否与
domain-driven-design有关。您能否详细说明 DDD 是如何出现在这里的。 -
对不起。我已经从标签列表中删除了 DDD
标签: rest dto service-layer