最近、副作用のある方法は良くないという記事を読んだことがあります。ですから、ここでの私の実装が副作用があると分類できるかどうかを尋ねたいと思います。
SecurityGuard
顧客がクラブに行くことを許可する必要があるかどうかを確認するaがあるとします。
SecurityGuard
どちらにもvalidNamesのリストまたはinvalidNamesのリストのみがあり、両方はありません。
SecurityGuard
にvalidNamesしかない場合、彼はリストに名前が載っている顧客のみを許可します。SecurityGuard
にinvalidNamesしかない場合、彼は名前がリストにない顧客のみを許可します。SecurityGuard
リストがまったくない場合、彼はすべての人を許可します。
したがって、ロジックを適用するために、各リストのセッターで、新しいリストに値がある場合は、他のリストをリセットします。
class SecurityGaurd {
private List<String> validNames = new ArrayList<>();
private List<String> invalidNames = new ArrayList<>();
public void setValidNames(List<String> newValidNames) {
this.validNames = new ArrayList<>(newValidNames);
// empty the invalidNames if newValidNames has values
if (!this.validNames.isEmpty()) {
this.invalidNames = new ArrayList<>();
}
}
public void setInvalidNames(List<String> newInvalidNames) {
this.invalidNames = new ArrayList<>(newInvalidNames);
// empty the validNames if newInvalidNames has values
if (!this.invalidNames.isEmpty()) {
this.validNames = new ArrayList<>(); //empty the validNames
}
}
public boolean allowCustomerToPass(String customerName) {
if (!validNames.isEmpty()) {
return validNames.contains(customerName);
}
return !invalidNames.contains(customerName);
}
}
したがって、ここでは、setterメソッドに暗黙のアクションがあり、他のリストがリセットされていることがわかります。
問題は、私がここで行っていることは、副作用があると見なされる可能性があるということです。私たちがそれを変えなければならないほどそれは十分に悪いですか?はいの場合、どうすればこれを改善できますか?
前もって感謝します。