私はこれまでの開発中に、このことについてしばらく考えてきました。
私はそのようなことをすることに反対しています。通常、ロジックを明示的に処理する別のメソッドを宣言しています。
例えば
クラスにオブジェクトのリストを返すメソッドがある場合、getter メソッドを介してこのコレクションを直接変更するのは悪い考えだと思います。
Public Class ReportGenerator{
private List<Configurations> configurations;
List<Configuration> getConfigurations (){
return this.configurations;
}
}
次のことを行うことは悪い習慣だと思います:
getConfigurations().remove(1); //remove a configuration via a getter
次のアプローチを使用します。
Public Class ReportGenerator{
private List<Configurations> configurations;
public List<Configuration> getConfigurations (){
return Collections.unmodifiableList(this.configurations);
}
public void removeConfiguration(int index) //logic explicitly handle the remove
{
this.configurations.remove(index);
}
}
ただし、もう1つ頭に浮かぶのは、構成オブジェクトにもゲッターとセッターがある場合、他の人を防ぐことはできないということです
reportGenerator.getConfigurations().get(0).settTitle("test");
ReportGenerator の getter メソッドを使用して Configuration オブジェクトの状態を変更することはできますが、これは許可すべきではないと思います。しかし、これを防ぎたい場合は、ReportGenerator クラスでさらに多くのメソッドを宣言して、呼び出しを Configuration オブジェクトに転送し、防御コピーを使用する必要があります。
私の質問は、コンポジションを使用して別のオブジェクト B を含むオブジェクト A があり、両方にゲッターとセッターがある場合、A のゲッター メソッドを介してオブジェクト B の状態を変更することを好みますか? 例えば
A.getB().setTitle("");
または、B の状態を変更するために A にメソッドを追加することを好みますか (基本的に B への呼び出しを転送します)
例えば
A.setBTitle("");
このメソッドの内部では、A call B.setTitle("");
長い質問で申し訳ありませんが、正確に何を聞きたいのかよくわからないと思います。あなたが理解することを願って。:P