ゲッターとセッターは悪だと誰かが言ったら、なぜそう言っているのか考えてみてください。
ゲッター
彼らは悪ですか?コードに悪などありません。コードはコードであり、良くも悪くもありません。読み取りとデバッグがどれほど難しいかだけの問題です。
あなたの場合、ゲッターを使用して最終価格を計算してもまったく問題ないと思います。
悪"
ユースケース: 何かを購入するときにアイテムの価格が必要だと思います。
次のようなゲッターを使用することがあります。
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
。