Introduce Parameter Object, ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ์ ๋ํด ์์๋ณด์.
์์ฝ
์ฝ๋
function amountInvoiced(startDate, endDate) {...}
function amountReceived(startDate, endDate) {...}
function amountOverdue(startDate, endDate) {...}
function amountInvoiced(aDateRange) {...}
function amountReceived(aDateRange) {...}
function amountOverdue(aDateRange) {...}
๋ฐฐ๊ฒฝ
- ๋ฐ์ดํฐ ํญ๋ชฉ ์ฌ๋ฌ๊ฐ๊ฐ ํจ๊ป ๋ชฐ๋ ค๋ค๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ํ๋๋ก ๋ฌถ์ด์ฃผ์.
- ๋งค๊ฐ๋ณ์ ์๊ฐ ์ค์ด๋ค๊ณ , ์ผ๊ด์ฑ๋ ๋์์ง๋ค.
- ํ์ง๋ง ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ธ ๊ฒ์ ์ฝ๋๊ฐ ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐ๋๋ค๋ ์ ์ ์๋ค.
์ ์ฐจ
- ์ ๋นํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ค๋ฉด ์๋ก ๋ง๋ ๋ค.
- Value Object๋ก ๋ง๋ค์.
- ํ ์คํธํ๋ค.
- ํจ์ ์ ์ธ ๋ฐ๊พธ๊ธฐ๋ก ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ถ๊ฐํ๋ค.
- ํ ์คํธํ๋ค.
- ํจ์ ํธ์ถ ์ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ธ์คํด์ค๋ฅผ ๋๊ธฐ๋๋ก ์์ ํ๋ค. ๋ฐ๊ฟ๋ ๋ง๋ค ํ ์คํธ
- ๊ธฐ์กด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์์๋ฅผ ์ฌ์ฉํ๋๋ก ๋ฐ๊พผ๋ค.
- ๋ค ๋ฐ๊ฟจ๋ค๋ฉด ๊ธฐ์กด ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ฑฐํ๊ณ ํ ์คํธํ๋ค.
์์
const station = {
name: "ZB1",
readings: [
{temp: 47, time: "2016-11-10 09:10"},
{temp: 53, time: "2016-11-10 09:20"},
{temp: 58, time: "2016-11-10 09:30"},
{temp: 53, time: "2016-11-10 09:40"},
{temp: 51, time: "2016-11-10 09:50"},
]
};
function readingsOutsideRange(station, min, max) {
return station.readings.filter(r => r.temp < min || r.temp > max);
}
alerts = readingsOutsideRange(station, operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
- operatingPlan์ ์๋ ๋ฒ์ ๊ฐ์ ๊ฐ์ ธ์ ์ ๋ฌํ๊ณ ์๋ค.
- ์ด๋ ๊ฒ ๋ฒ์๋ผ๋ ๊ฐ๋ ์ ๊ฐ์ฒด ํ๋๋ก ๋ฌถ์ด ํํํ๋๊ฒ ๋ซ๋ค.
class NumberRange {
constructor(min, max) {
this._data = {min: min, max: max};
}
get min() {
return this._data.min;
}
get max() {
return this._data.max;
}
}
- ๊ฐ ๊ฐ์ฒด๋ก ๋ง๋ค๋ ค ํ์ผ๋, ์ด ๊ฒฝ์ฐ๋ ๋์๊น์ง ํฌํจํ๋ ๊ฒ์ด ๋์ class๋ก ๋ง๋ค์๋ค.
- ๋ค๋ง ๊ฐ ์์ ์์ฒด๋ ์์ ์์ ์ด๋ฏ๋ก setter๋ ๋ง๋ค์ง ์์๋ค.
function readingsOutsideRange(station, min, max, range) {
return station.readings.filter(r => r.temp < min || r.temp > max);
}
alerts = readingsOutsideRange(station, operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling, null);
- ์ผ๋จ ์๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ถ๊ฐํ์.
- ํ ์คํธ ํ๋ค.
function readingsOutsideRange(station, min, max, range) {
return station.readings.filter(r => r.temp < min || r.temp > max);
}
const range = new NumberRange(operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
alerts = readingsOutsideRange(station, operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling, range);
- ํจ์ ํธ์ถ ์ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ธ์คํด์ค๋ฅผ ๋๊ธฐ๋๋ก ์์ ํ๋ค.
- ๋์์ ์๋ฐ๊ฟจ์ผ๋ ์ ๋ ๊ฒ์ด๋ค.
- ํ ์คํธ.
function readingsOutsideRange(station, min, range) {
return station.readings.filter(r => r.temp < min || r.temp > range.max);
}
const range = new NumberRange(operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
alerts = readingsOutsideRange(station, operatingPlan.temperatureFloor, range);
- max๋ถํฐ ๋์ฒดํด๋ณด์.
function readingsOutsideRange(station, range) {
return station.readings.filter(r => r.temp < min || r.temp > range.max);
}
const range = new NumberRange(operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
alerts = readingsOutsideRange(station, range);
- ์ด์ ๋๋ฌ๋ค.
์ง์ ํ ๊ฐ ๊ฐ์ฒด๋ก ๊ฑฐ๋ญ๋๊ธฐ
- ๊ฐ ๊ฐ์ฒด๋ก ๋ฐ๊พธ๋ ์์ ์์ฒด๋ ๊ฐ์ง ์์ ์ ์ค๋น๋จ๊ณ๋ค.
- ์ด๋ ๊ฒ ๋๋ฉด ๊ฐ ๊ฐ์ฒด๋ก ๋ง๋ ๊ฐ์ฒด์ ๊ด๋ จ ๋์์ ์ด ํด๋์ค๋ก ์ฎ๊ธธ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด ์จ๋๊ฐ ํ์ฉ ๋ฒ์ ๋ด์ธ์ง ๊ฒ์ฌํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๊ฒ ๋ค.
class NumberRange {
constructor(min, max) {
this._data = {min: min, max: max};
}
get min() {
return this._data.min;
}
get max() {
return this._data.max;
}
function contains(arg) {
return (arg >= this.min && arg <= this.max);
}
}
function readingsOutsideRange(station, range) {
return station.readings.filter(r => !range.contains(r.temp));
}
- ์ด๋ ๊ฒ ํ๋ฉด ๋ฒ์๋ฅผ ๊ฒ์ฌํ๋ ์ฝ๋๋ฅผ ํ ๊ณณ์ผ๋ก ๋ชจ์ ์ ์๋ค.