次のコードが正しいかどうか確認してください。実際には、私は誘導コードに似たものがあることを知っていて、Open/Closedの原則と一致するかどうかは疑問です。オープン/クローズド原理とカプセル化違反
public abstract class CustomClass {
private ClassThatSetEnvironmentProperty sysProp = new ClassThatSetEnvironmentProperty("SYS_PROPETY", "SYS_PROPERTY_VALUE");
// some code here
void setSysProp(ClassThatSetEnvironmentProperty sysProp) {
this.sysProp = sysProp;
}
}
私の理解は、セッターのみ(ClassThatSetEnvironmentProperty
を模擬するために)ユニットテスト可能性のために定義されています。しかし、この場合、セッターは、コンクリートの継承者が定義された状態を変更することを可能にします。私の見解からは、カプセル化に違反しています。私はそれがオープン/クローズドなprinicpleに違反していると思います。率直に言えば、私の同僚の何人かは逆の意見を持っています。私は本当にあまり経験がないので、それを認識することは難しいです。あなたの意見をここで共有してください。ありがとうございました。
私はセッター・インジェクションを介してコンストラクタ・インジェクションを好むだろう。 – duffymo
あなたは正しいです、私はあなたに完全に同意します。しかし、現在のケースはどうですか? – aime
オープン/クローズの原則の定義では、ソースコードを変更せずにクラスの動作を変更できる必要があると規定されています。この場合、私はそれが原則に全く違反しているとは思わない。ソースコードは同じままですが、 'sysProp'は変更されます。 – christopher