第11章 重构API
11.1 将查询函数和修改函数分离(Separate Query
from Modifier)
function getTotalOutstandingAndSendBill() {
const result = customer.invoices.reduce((total, each) => each.amount + total, 0);
sendBill();
return result;
}
–>
function totalOutstanding() {
return customer.invoices.reduce((total, each) => each.amount + total, 0);
}
function sendBill() {
emailGateway.send(formatBill(customer));
}
如果遇到一个“既有返回值又有副作用”的函数,我就会试着将查询动作从修改动作中分离出来。
11.2 函数参数化(Parameterize Function)
function tenPercentRaise(aPerson) {
aPerson.salary = aPerson.salary.multiply(1.1);
}
function fivePercentRaise(aPerson) {
aPerson.salary = aPerson.salary.multiply(1.05);
}
–>
function raise(aPerson, factor) {
aPerson.salary = aPerson.salary.multiply(1 + factor<