다음 코드가 올바른지 확인해주십시오. 사실은 내가 유도 코드에서 비슷한 것을 발견했고, 그것이 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
를 모방) 단위 테스트 가능성에 대해 정의된다. 그러나이 경우 setter는 구체적인 상속자가 정의 된 상태를 변경할 수있게합니다. 내 관점에서 보면 캡슐화에 위배됩니다. 내가 생각하기에 그것은 또한 공개/공개 된 prinicple을 위반하는 것이라고 생각합니다. 솔직히, 내 동료 중 일부는 반대 의견을 가지고 있습니다. 나는 정말로 많은 경험을하지 않았기 때문에 그것을 인식하는 것이 어렵다. 여기에 의견을 말하십시오. 고맙습니다.
나는 setter 주입에 비해 생성자 주입을 선호합니다. – duffymo
당신이 옳았고 전적으로 당신과 동의합니다. 그러나 현재의 사건은 어떻습니까? – aime
열기/닫기 원칙의 정의는 소스 코드를 수정하지 않고 클래스의 동작을 변경할 수 있어야한다고 명시합니다. 이 경우 나는 그것이 원칙을 전혀 위반하지 않는다고 생각합니다. 소스 코드는 동일하게 유지되지만 'sysProp'은 변경됩니다. – christopher