什么情况下应该对模型操作封装成service
发布于 7 年前 作者 acodercat 2920 次浏览 来自 问答

我的controller和service还有model是一一对应关系的。比如我有个device控制器里面有个叫做getDevice的action,那么我也就有个device的service,里面也有个getDevice的方法,然后在这service个方法里面操作模型,有时候只有一行代码,请问这种情况是否还有封装的必要,还是说直接在控制器的action里面操作模型 controller 代码

async getDevice(ctx) {
      const { id } = ctx.params;
      const { company_id } = ctx.state.user;
      let result = await this.service.device.getDevice(id, company_id);
      if (!result) {
        this.ctx.throw(404, 'device not found');
      }
      ctx.body = result;
  }

service代码

async getDevice(id, company_id) {
      return await this.ctx.model.Device.scope({ method: ['company', company_id]}).findById(id);
  }
4 回复

典型做法:Model层定义模型,dao层封装crud等单个model上的操作方式,service层是组合多个dao的业务层。

如果有复杂业务的,建议3个分层都要。如果没有,那就可选

如果业余不复杂,就像我文中提到的只有一个查询,是否有必要封装成一个service方法呢

个人建议:还是要的,方便以后可扩展

@luanxuechao 嗯,大部分业务都是多个表的,所以这是最好的方式

回到顶部