2.3 Service层

1 用到sql的代码

   有些开发者习惯于 sql 随手就来,不管是在哪里只要有需要就直接 sql 操作数据库。这种习惯表面上会带来开发效率与便利性,但事实并非如此

    

2 与业务有关的代码


2 优先考虑业务层

   当要写代码时,优先考虑将代码写在 Service 层中,例如有个 RegValidator 用于注册时对表单提交的数据进行校验,其中需要判断一项 nickName 是否已被注删,在 RegValidator 中有如下代码:

public class RegValidator extends Validator {
  public void validate(Controller c) {
    String sql = "select id from account where nickName=? limit 1";
    Account account = new Account().findFirst(sql, c.getPara("nickName"));
    if (account != null) {
      addError("msg", "nickName 已被注册");
    }
    // ... 其它代码
  }
}

    最佳实践是 nickName 是否被注册的代码写在 AccountService 层中,有利于代码重用,有助于未来分布式演化,有利于在业务层添加缓存等机制,将代码挪至业务层后 RegValidator 的样子:

public class RegValidator extends Validator {
  public void validate(Controller c) {
    if (AccountService.me.isNickNameRegisted(c.getPara("nickName"))) {
       addError("msg", "nickName 已被注册"):
    }
  }
}