學習Spring5必知必會(1)~未使用spring前的麻煩

一樂樂發表於2022-02-16

一、未使用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();

相關文章