后端分层职责怎样划分?

server层职责,包不包括封装数据(保证可复用前提下)和异常处理,比如这样写server:

async find(query) {
const result = await this.app.mysql.get('person', query);
return result;
}

那么controller层调用就要根据结果判断封装不同结果给前台,异常在controller这里处理.
这样写:

async find(query) {
const result = await this.app.mysql.get('person', query);
if(result){
  return {code:200,...} //可复用封装
}
  return {code:404,...} //可复用封装
}

controller只负责根据状态码添加拼装msg返回给前台.系统异常也在server处理返回{code:500}
应该按照那种来划分.

阅读 3.3k
2 个回答

GraphQL了解下,完美解决你的问题

我的习惯是在controller里只放简单的入参校验(java使用Spring的注解@Validated)和响应结果的包装

逻辑都放在了service层。

  1. 数据的封装一般也是在service层做的,比如:vo转成数据库实体类,经常要这么操作
  2. 发现了逻辑异常就直接抛出一个运行时异常,然后让统一的异常拦截器@ExceptionHandler去处理,用于返回统一的响应数据结构。

喜欢controller保持简洁,哈哈。

感觉迷茫的时候可以去看看xxx最佳实践,很有帮助的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题