ふぃーるどのーつ

技術系ブログ「ふぃーるどのーつ」

Diコンテナ使ってなくてもDIの考え方は有効だよ、という話

SeasarやSpring などのDIコンテナを使っていなくてもDIの考え方は有効です。
例えば、

	public void calclateSalary(){
		List<Emp> empList = dao.getEmp("本社");
		for (Emp emp : empList) {
			if (emp.getLevel(10)){
		             〜なんだかかんだか〜
			} else if (〜){
			     〜ああだこうだ〜
			}
		}
	}

というようにオブジェクトを「取りに来る」ところとオブジェクトを「取り扱う」ところが一体となっているよりも、

	public void calclateSalary(){
		List<Emp> empList = dao.getEmp("本社");
		for (Emp emp : empList) {
			calclateSalary(emp);
		}
	}
	
	void calclateSalary(Emp emp){
		if (emp.getLevel(10)){
			〜なんだかかんだか〜
		} else (〜){
			〜ああだこうだ〜
		}
	}

というようにオブジェクトを取りに来るところとオブジェクトを取り扱うところを分けた方が、xUnit等のテストのやりやすさ(testability)を考えたときに望ましいとされています*1

*1: DIコンテナを使っていてもここらへんの考え方ができない人がいるのは困ったところ