• 学习Spring5必知必会(1)~未使用spring前的麻烦



    一、未使用spring前的麻烦

    • 开闭原则:扩展是开放的,但是对于修改是“封闭的”。

    1、代码耦合度比较高【不符合开闭原则】:

    public class EmployeeServiceImpl implements IEmployeeService {
    	private IEmployeeDAO dao;
    	public EmployeeServiceImpl() {
    		//创建依赖对象
    		dao = new EmployeeDAOJdbcImpl();
    	}
    	public void save() {
    	//TODO
    	}
    }
    
    • 此时如果把IEmployeeDAO 的实现类换成 EmployeeDAOMyBatisImpl , 此时需要修改 EmployeeServiceImpl 的源代码,不符合开闭原则。

    2、循环依赖问题(使用A类要先创建B类;使用B类要先创建C类;使用C类要先创建A类,循环啦。。。)


    3、控制事务繁琐【不符合开闭原则】:

    //增删改查的步骤重复了(打开资源、开启事务、提交事务、回滚事务、释放资源)
    public class EmployeeServiceImpl implements IEmployeeService {
    	public void save() {
    		//打开资源
    		//开启事务
    		try {
    			//保存操作
    			//提交事务
    		} catch (Exception e) {
           		 //回滚事务
    		} finally {
    			//释放资源
    		}
    	}
    }
    
    ■ 模板基类:
    • 模板类:作为父类,处理通用算法功能,把不同的处理细节暴露给子类。
    //模板基类:
    public class BaseServiceTemplate implements IEmployeeService {
        public void save() {
            //打开资源
            //开启事务
            try {
                this.doSave();
                //提交事务
            } catch (Exception e) {
                //回滚事务
            } finally {
                //释放资源
            }
        }
    
        protected void doSave() {
            //NOOP
        }
    }
    
    //子类
    public class EmployeeServiceImpl extends BaseServiceTemplate implements IEmployeeService {
        protected void doSave() {
            //保存操作
        }
    }
    

    ■ 使用第三方框架运用太麻烦:
    //使用mybatis框架
    Person p = new Person();
    SqlSession session = MyBatisUtil.getSession();
    PersonMapper personMapper = session.getMapper(PersonMapper.class);
    personMapper.insert(p);
    session.commit();
    session.close();
    
  • 相关阅读:
    javascript typeof 和 instanceof 的区别和联系
    || and && 理解
    jquery选择器总结
    overflow-y:auto 回到顶部
    HTML 获取屏幕,浏览器,页面的高度
    height()、innerHeight()、outerHeight()函数的区别详解
    git入门篇-----本地操作
    sublime快捷键
    Atom 和 VSCode 同一天发布神器:实时编码分享
    编辑器插件和配置备份神器--sync setting
  • 原文地址:https://www.cnblogs.com/shan333/p/15899159.html
Copyright © 2020-2023  润新知