// orderString = "-상품번호 수량"
const orderData = orderString.split(/\s+/);
// orderData = ["-상품번호","수량"]
// priceList = { 상품번호 : 상품금액 }
const productPrice = priceList[orderData[0].split("-")[1]];
// 상품 가격
const orderPrice = parseInt(orderData[1])*productPrice;
// 주문가 = 상품 가격*수량
// 변경후
const orderRecord = parseOrder(order);
const orderPrice = price(orderRecord,priceList);
//주문가
function parseOrder(aString){// 주문 데이터 전처리
const values = aString.split(/\s+/);
return ({ productId: values[0].split("-")[1], quantity: parseInt(values[1]), });
}
function price(order,priceList){
return order.quantity*priceList[order.productId];
}
1. 두 번째 단계에 해당하는 코드를 독립 함수로 추출한다.
2. 테스트한다.
3. 중간 데이터 구조를 만들어서 앞에서 추출한 함수의 인수로 추가한다.
4. 테스트 한다.
5. 추출한 두번째 단계 함수의 매개변수를 하나씩 검토한다. 그 중 첫 번째 단계에서 사용되는 것은 중간 데이터 구조로 옮긴다. 하나씩 옮길 때마다 테스트한다.
6. 첫 번째 단계 코드를 함수로 추출하면서 중간 데이터 구조를 반환하도록 만든다.
상품의 결제 금액 계산
1. 상품 가격 계산 : 데이터 - 상품정보
2. 배송비 계산 : 데이터 - 배송정보
// 변경 전
function priceOrder(product, quantity, shippingMethod){
// 1. 상품 가격 계산
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// 2. 배송비 계산
const shippingPerCase = (basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = quantity*shippingPerCase;
const price = basePrice-discount + shippingCost;
return price;
}
함수로 추출한다.
// 두번째 계산 부분을 함수로 추출한다.
function priceOrder(product, quantity, shippingMethod){
// 1. 상품 가격 계산
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// 2. 배송비 계산
const price = applyShipping(basePrice,shippingMethod,quantity,discount);
return price;
}
function applyShipping(basePrice, shippingMethod, quantity, discount){
const shippingPerCase = (basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = quantity*shippingPerCase;
const price = basePrice-discount + shippingCost;
return price;
}
중간데이터 구조를 만든다.
function priceOrder(product, quantity, shippingMethod){
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
// 중간 데이터 구조
const priceData = {basePrice:basePrice, quantity:quantity, discount:discount};
const price = applyShipping(priceData,shippingMethod);
return price;
}
function applyShipping(priceData, shippingMethod){
const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = priceData.quantity*shippingPerCase;
const price = priceData.basePrice-priceData.discount + shippingCost;
return price;
}
첫번째 함수로 추출한다. 그리고 그 함수의 리턴값이 중간 데이터 형식을 띄게 한다.
function priceOrder(product, quantity, shippingMethod){
const priceData = calculatePricingData(product,quantity);
return applyShipping(priceData,shippingMethod);
}
function calculatePricingData(product,quantity){
const basePrice = product.basePrice*quantity;
const discount = Math.max(quantity-product.discountThreshold,0)
*product.basePrice*product.discountRate;
return {basePrice:basePrice, quantity:quantity, discount:discount};
}
function applyShipping(priceData, shippingMethod){
const shippingPerCase = (priceData.basePrice>shippingMethod.discountThreshold)
?shippingMethod.discountedFee:shippingMethod.feePerCase;
const shippingCost = priceData.quantity*shippingPerCase;
const price = priceData.basePrice-priceData.discount + shippingCost;
return price;
}
7.2. 컬렉션 캡슐화하기 (0) | 2021.10.05 |
---|---|
7.1. 레코드 캡슐화하기 (0) | 2021.10.01 |
6.10. 여러 함수를 변환 함수로 묶기 (0) | 2021.09.26 |
6.9. 여러 함수를 클래스로 묶기 (0) | 2021.09.26 |
6.8. 매개변수 객체 만들기 (Introduce Parameter Object) (0) | 2021.09.26 |
댓글 영역