Combine Functions into Transform, ์ฌ๋ฌ ํจ์๋ฅผ ๋ณํ ํจ์๋ก ๋ฌถ๊ธฐ๋ฅผ ์์๋ณด์.
์์ฝ
์ฝ๋
function base(aReading) {...}
function taxableCharge(aReading) {...}
function enrichReading(argReading) {
const aReading = _.cloneDeep(argReading);
aReading.baseCharge = base(aReading);
aReading.taxableCharge = taxableCharge(aReading);
return aReading;
}
๋ฐฐ๊ฒฝ
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ด๊ฐ ์ํ๋ ํํ์ ๊ฐ์ฒด๋ก ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค.
- ์ด๋ด ๊ฒฝ์ฐ ํ ๊ณณ์์ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ค๋ณต๋ก์ง์ด ๋๋ฒ๋ฆฐ๋ค.
- ์ด๋ด ๊ฒฝ์ฐ ๋ณํ ํจ์๋ก ๋ฌถ์ด๋ฒ๋ฆฌ๋ฉด ์ฌ๋ฌ๊ณณ์์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ ์ฐจ
- ๋ณํํ ๋ ์ฝ๋๋ฅผ ์
๋ ฅ๋ฐ์์ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํ๋ ๋ณํ ํจ์๋ฅผ ๋ง๋ ๋ค.
- ์ด ์์ ์ ๋์ฒด๋ก ๊น์ ๋ณต์ฌ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ๋ณํ ํจ์๊ฐ ์๋ณธ ๋ ์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์๋์ง ๊ฒ์ฌํ๋ ํ ์คํธ๋ฅผ ๋ง๋ จํด๋๋ฉด ์ข๋ค.
- ๋ฌถ์ ํจ์ ์ค ํจ์ ํ๋๋ฅผ ๊ณจ๋ผ์ ๋ณธ๋ฌธ ์ฝ๋๋ฅผ ๋ณํ ํจ์๋ก ์ฎ๊ธด๋ค.
- ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ํด๋น ํ๋๋ฅผ ์ฌ์ฉํ๋๋ก ์์ ํ๋ค.
- ๋ก์ง์ด ๋ณต์กํ๋ฉด ํจ์ ์ถ์ถํ๊ธฐ ๋ถํฐ ํ๋ค.
- ํ ์คํธํ๋ค.
- ๋๋จธ์ง ํจ์๋ ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์์
reading = {customer: "ivan", quantity: 10, month: 5, year: 2017};
// Client 1
const aReading = aquireReading();
const baseCharge = baseRate(aReading.month, aReading.year) * aReading.quantity;
// Client 2
const aReading = aquireReading();
const base = (baseRate(aReading.month, aReading.year) * aReading.quantity);
const taxableCharge = Math.max(0, base - taxThreshold(aReading.year));
// Client 3
const aReading = aquireReading();
const basicChargeAmount = calculateBaseCharge(aReading);
function calculateBaseCharge(aReading) {
return baseRate(aReading.month, aReading.year) * aReading.quantity;
}
- ๊ณ์ฐ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๊ณ ์๋ ์ํฉ์ด๋ค.
- ํด๋ผ์ด์ธํธ 3์์๋ ํจ์๋ก ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํ๊ณ ์๋ค.
- ์ด ๋ชจ๋๋ฅผ ํ๋์ ๋ณํ ๋จ๊ณ๋ก ๋ชจ์๋ณด์.
function enrichReading(original) {
const result = _.cloneDeep(original);
result.baseCharge = calculateBaseCharge(result);
result.taxableCharge = Math.max(0, result.baseCharge - taxThreshold(result.year));
return result;
}
// Client 1
const rawReading = aquireReading();
const aReading = enrichReading(rawReading);
const baseCharge = aReading.baseCharge;
// Client 2
const rawReading = aquireReading();
const aReading = enrichReading(rawReading);
const taxableCharge = aReading.taxableCharge;
// Client 3
const rawReading = aquireReading();
const aReading = enrichReading(rawReading);
const basicChargeAmount = aReading.baseCharge;
์ ์ฌ์ ๋ฌธ์
- ์ง๊ธ์ ์๋ณธ ํ๋ ์์ฒด๋ฅผ ๋ณต์ฌํ๊ณ , ๋ด๋ณด๋ผ ๋ ํ๋๋ฅผ ์ถ๊ฐํด์ ๋ด๋ณด๋ด๊ณ ์๋ค.
- ์ด๋ ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์์ ์๋ณธ ํ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
- ์ฐจ๋ผ๋ฆฌ ํด๋์ค๋ก ๋ฌถ์ด์ ๋ฑ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค.