7-8. 중재자 제거하기

적용 시점

  • 위임 메서드가 너무 많이 생겨서 관리가 힘든 경우

  • 클라이언트에서 위임 객체를 직접 호출하는게 나은 경우

절차

  1. 위임 객체를 얻는 게터를 만듬

  2. 위임 메서드를 호출하는 클라이언트가 모두 이 게터를 거치도록 수정. 하나씩 바꿀 때마다 테스트

  3. 모두 수정했다면 위임 메서드를 삭제

예시

❌Before

// 서버
class Person {
	constructor(name, department) {
		this._name = name;
		this._department = department;
	}
	get name() { return this._name; }
	get manager() { return this._department.manager; } // 위임 메서드
	set manager(arg) { this._department.manager = arg; } // 위임 메서드
}

class Department {
	constructor(chargeCode, manager) {
		this._chargeCode = chargeCode;
		this._manager = manager;
	}
	get chargeCode() { return this._department; }
	set chargeCode(arg) { this._chargecode = arg; }
	get manager() { return this._manager; }
	set manager(arg) { this._manager = arg; }
}

// 클라이언트
aPerson = new Person('Peanut', new Department('code123', 'Scott'));
manager = aPerson.manager; // 위임 제거

⭕After

// 서버
class Person {
	constructor(name, department) {
		this._name = name;
		this._department = department;
	}
	get name() { return this._name; }
	get department() { return this._department; }
	set department(arg) { this._department = arg; }
}

class Department {
	constructor(chargeCode, manager) {
		this._chargeCode = chargeCode;
		this._manager = manager;
	}
	get chargeCode() { return this.chargeCode; }
	set chargeCode(arg) { this._chargecode = arg; }
	get manager() { return this._manager; }
	set manager(arg) { this._manager = arg; }
}

// 클라이언트
aPerson = new Person('Peanut', new Department('code123', 'Scott'));
manager = aPerson.department.manager;

Last updated