当有人告诉你 getter 和 setter 是邪恶的,想想他们为什么这么说。
吸气剂
他们是邪恶的吗?代码中没有邪恶之类的东西。代码就是代码,没有好坏之分。这只是阅读和调试的难易程度的问题。
在您的情况下,我认为使用吸气剂来计算最终价格是完全可以的。
恶魔”
用例:您认为在购买某物时想要某件商品的价格。
人们有时会像这样使用 getter:
if(item.getPrice() <= my_balance) {
myBank.buyItem(item);
}
这段代码没有任何问题,但它并不像它可能的那样简单。看看这个(更务实的方法):
myBank.buyItem(item); //throws NotEnoughBalanceException
购买商品时检查商品价格不是买家或收银员的工作。这实际上是银行的工作。假设客户A有一个SimpleBank.java
public class SimpleBank implements Transaction {
public void buyItem(Item item){
if(getCustomer().getBalance() >= item.getPrice()){
transactionId = doTransaction(item.getPrice());
sendTransactionOK(transactionId);
}
}
}
第一种方法在这里似乎很好。但是如果客户B有一个NewAndImprovedBank.java?
public class NewAndImprovedBank implements Transaction {
public void buyItem(Item item){
int difference = getCustomer().getBalance() - item.getPrice();
if (difference >= 0) {
transactionId = doTransaction(item.getPrice());
sendTransactionOK(transactionId);
} else if (difference <= getCustomer().getCreditLimit()){
transactionId = doTransactionWithCredit(item.getPrice());
sendTransactionOK(transactionId);
}
}
}
您可能认为在使用第一种方法时您是在防御,但实际上您是在限制系统的功能。
结论
不要请求许可item.getPrice(),而是请求宽恕NotEnoughBalanceException。