作者:傲慢的心雅_243 | 来源:互联网 | 2022-11-23 13:45
顾名思义,设计服务层时的最佳实践是什么?我确实知道服务层应始终返回DTO,以便将域(实体)对象保留在服务层内。但是,控制器对服务层的输入应该是什么?
我在下面提出了三个建议:
方法1:在这种方法中,域对象(项)保留在服务层中。
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);
}
}
方法2:这是服务层接收自定义请求对象的地方。我已经在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);
}
}
方法3:服务层接受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);
}
}
如果上述三种方法都不正确或不是最佳方法,请就最佳实践向我提出建议。