飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

封装与职责分离的开发思维

时间:2021-12-21  作者:shan333  

封装与职责分离的开发思维

1:封装:参数过多应该封装成一个对象

2:职责分离:谁拥有该数据,谁就应该包含操作该数据的方法

■ 举例:没有封装【多个查询条件作为参数 (String name, Integer minAge, Integer maxAge, Integer dormBuildId) 】

    @Override
    public List<Teacher> query(String name, Integer minAge, Integer maxAge, Integer dormBuildId) {
        StringBuilder sql = new StringBuilder();
        域名nd("SELECT * FROM t_teacher WHERE 1=1");
        //封装占位符参数
        List<Object> parameters = new ArrayList<>();
//拼接sql和设置占位符参数值

   //姓名 if (域名tBlank(name)) { 域名nd(" AND name LIKE ?"); 域名("%" + name + "%"); } //最小年龄 if(minAge != null) { 域名nd(" AND age >= ?"); 域名(minAge); } //最大年龄 if(maxAge != null) { 域名nd(" AND age <= ?"); 域名(maxAge); } 域名tln("sql=" + sql); 域名tln("parameters=" + parameters); return 域名y(域名ring(), new BeanListHandler<>(域名s), 域名ray()); }

■ 封装:将多个查询条件参数 (String name, Integer minAge, Integer maxAge, Integer dormBuildId) 封装成一个对象:

@Data
public class TeacherQueryObject {
    private String name;
    private Integer minAge;
    private Integer maxAge;
    private Integer dormBuildId;
}

■ 没有实现职责分离的情况:

    @Override
    public List<Teacher> query(TeacherQueryObject tqo) {
        StringBuilder sql = new StringBuilder();
        域名nd("SELECT * FROM t_teacher WHERE 1=1");
        //封装占位符参数
        List<Object> parameters = new ArrayList<>();

       // 拼接sql语句和设置占位符参数值
        //姓名
        if (域名tBlank(域名ame())) {
            域名nd(" AND name LIKE ?");
            域名("%" + 域名ame() + "%");
        }

  。。。。。

}

■ 职责分离(谁拥有该数据,谁就应该包含操作该数据的方法):

❀ 要拼接的sql语句的数据时在tqo对象里的,且占位符的参数设置数据也是在tqo对象,则tqo对象应该提供对应的方法

package 域名y;

import 域名yList;
import 域名;
import 域名域名ngUtils;
import 域名;

@Data
public class TeacherQueryObject {
    private String name;
    private Integer minAge;
    private Integer maxAge;
    private Integer dormBuildId;
//    // 封装占位符参数
    private List<Object> parameters = new ArrayList<>();
    
    public TeacherQueryObject() {};
    public TeacherQueryObject(String name, Integer minAge, Integer maxAge, Integer dormBuildId) {
        域名 = name;
        域名ge = minAge;
        域名ge = maxAge;
        域名BuildId = dormBuildId;
        域名meters = parameters;
    }
        
    public String getQuery() {
        StringBuilder sql = new StringBuilder();
        域名nd(" WHERE 1=1");
        // 拼接姓名
        if (域名tBlank(name)) {
            域名nd(" AND name LIKE ?");        
            域名("%" + name + "%");
        }
        // 拼接最小年龄
        if (minAge != null) {
            域名nd(" AND age >= ?");    
            域名(minAge);
        }
        // 拼接最大年龄
        if (maxAge != null) {
            域名nd(" AND age <= ?");
            域名(maxAge);
        }
        return 域名ring();
    }
    
    public List<Object> getParameters() {
        return parameters;
    }

}
    // 高级查询
    @Override
    public List<Teacher> query(TeacherQueryObject tqo) {
        //职责分离【要拼接的sql语句的数据时在tqo对象里的,且占位符的参数设置数据也是在tqo对象,则tqo对象应该提供对应的方法】
        String querySql = 域名uery();
        String sql = "select * from t_teacher" + querySql;
        List<Object> parameters = 域名arameters();
        域名tln(querySql);
        域名tln(parameters);
        return 域名y(sql, new BeanListHandler<>(域名s), 域名ray());
    }

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。