2010-02-17 6 views
2

는 내 말은 다음과 같습니다빈에서 보호 속성을 만드는 것이 나쁜 습관으로 간주되는 이유는 무엇입니까?

public class SomeBackingBean { 

    protected String someString; 

    public void setSomeString (String str) { 
     this.someString = str; 
    } 

    public String getSomeString { 
     return someString; 
    } 
} 

그것은 일반적인 답변 단지 일반적인 경우였다.

이제 두 번째 예 :

public abstract class AbstractBean<T extends EntityInterface> { 

    protected T entity; 

    public void setEntity (T t) { 
     this.entity = t; 
    } 

    public void getEntity() { 
     return entity; 
    } 

    protected ReturnType calculateSomethingCommon() { 
     //use entity (knowing that it implements EntityInterface) 
     //to implement some common for all subclasses logic 
    } 
} 

public class ConcreteBean extends AbstractBean<ConcreteEntity> { 
    ... 
    //and here we can write only specific for this bean methods 
    ... 
} 

는 두 번째 예는 나쁘지 연습의 예인가?

답변

6

일반적으로 보호 된 변수는 객체 지향 원칙을 위반합니다. 다른 객체가 멤버 변수에 직접 액세스 할 수있게합니다. 이렇게하면 더 밀접한 결합이 이루어지며 다른 개체가 직접 변수를 사용하기 때문에 변수를 변경하기가 더 어려워집니다. 설정시 유효성 검사, getter/setter에 대한 로깅 추가 등의 작업을 수행 할 수 없다는 것을 의미합니다.

0

예를 들어 PropertyChangeListener가 Bean의 등록 정보에 등록되어있는 경우 등록 된 리스너가 보호 된 속성이 하위 클래스에 의해 직접 변경되면이를 알립니다.

관련 문제