아래 코드를
availableVacation(anEmployee, anEmployee.grade);
function availableVacation(anEmployee, grade) {
// calculate vacation
}
아래 코드로 바꿉니다.
availableVacation(anEmployee);
function availableVacation(anEmployee) {
const grade = anEmployee.grade;
// calculate vacation...
}
함수의 파라미터 목록은 요약 될 필요가 있습니다.
모든 코드가 그렇겠지만 내용이 중복되는 것을 피해야 합니다.
당연하겠지만 파라미터 목록이 짧으면 이해하기 더 쉽습니다.
파라미터를 없애기 가장 좋은 경우는 위의 예제처럼 같은 오브젝트 안에 들어있는 변수가 파라미터로 전달 될 때입니다.
Mechanics
1. 필요하다면 extract function을 적용합니다.
2. 함수 내부에서 참조를 파라미터로 교체한다. 모든 변경사항에 대해서 테스트합니다.
3.함수의 파타미터를 제거합니다.
Mechanics 2번은 const grade = anEmployye.grade 처럼 참조해서 접근 한 값을 변수로 할당합니다.
예제 코드를 살펴봅니다.
class Order {
get finalPrice() {
const basePrice = this.quantity * this.itemPrice;
let discountLevel;
if (this.quantity > 100) discountLevel = 2;
else discountLevel = 1;
return this.discountedPrice(basePrice, discountLevel);
}
discountedPrice(basePrice, discountLevel) {
switch (discountLevel) {
case 1: return basePrice * 0.95;
case 2: return basePrice * 0.9;
}
}
}
이 코드를 아래 코드로 먼저 바꿉니다.
class Order {
get finalPrice() {
const basePrice = this.quantity * this.itemPrice;
return this.discountedPrice(basePrice, this.discountLevel);
}
get discountLevel() {
return (this.quantity > 100) ? 2 : 1;
}
discountedPrice(basePrice, discountLevel) {
switch (discountLevel) {
case 1: return basePrice * 0.95;
case 2: return basePrice * 0.9;
}
}
}
그리고 아래 코드로 바꿉니다.
class Order {
get finalPrice() {
const basePrice = this.quantity * this.itemPrice;
return this.discountedPrice(basePrice);
}
discountedPrice(basePrice) {
switch (this.discountLevel) {
case 1: return basePrice * 0.95;
case 2: return basePrice * 0.9;
}
}
}
discountedPrice의 파라미터를 줄입니다.
switch 에서 this 로 접근해서 사용합니다.
'JavaScript│Node js' 카테고리의 다른 글
마틴 파울러 리팩토링 Push down field (0) | 2020.01.03 |
---|---|
마틴 파울러 리팩토링 Replace Query with Parameter (0) | 2020.01.02 |
Typescript-rest 로 만든 프로젝트 tsoa로 개편 (0) | 2019.12.09 |
마틴 파울러 리팩토링 - Replace conditional with polymorphism (0) | 2019.12.04 |
마틴 파울러 - 리팩토링 Remove Dead Code (0) | 2019.11.20 |
댓글