controller 的抽取
最近看项目,看到某个项目当中对 controller 里面的 CRUD 进行了抽取,代码如下:
public abstract class BaseController<E extends Serializable, S extends IService<E>> {
@Autowired
protected S baseService;
@PutMapping
public E save(E e) {
baseService.save(e);
log.debug("保存-{}", JSONObject.toJSON(e));
return e;
}
@GetMapping("list/{currentPage}/{size}")
public IPage<E> list(@PathVariable("currentPage") int currentPage, @PathVariable("size") int size) {
return baseService.page(new Page<>(currentPage, size));
}
@GetMapping("{id}")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "id", paramType = "path", dataType = "String")})
public E detail(@PathVariable("id") Serializable id) {
E e = baseService.getById(id);
return e;
}
@DeleteMapping("{id}")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "id", paramType = "path", dataType = "String")})
public void delete(@PathVariable("id") Serializable id) {
baseService.removeById(id);
log.debug("删除-{}", id);
}
@PostMapping
public E update(E e) {
baseService.updateById(e);
log.debug("修改-{}", JSONObject.toJSON(e));
return e;
}
@GetMapping
public IPage<E> list(Page<E> page) {
return baseService.page(page);
}
}
使用时,其他的 controller 只需要继承这个类,传入对应的实体和 service 接口就可以了。
感受
之前是没有抽取过 controller 层的 CRUD,看到了这个 controller 后,自己尝试了一下,感受到了这么做的一些优缺点,如下:
- 跟随请求进入某个具体的 controller 后,无法直接找到 service 接口实现。
- 规定好了 CRUD 的请求类型及路径,统一化。
- 感觉有点不符合单一职责。
想问问有没有大佬知道这么做的好处啊?或者这么做合适么?
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于