나는 많은 다른 가능성이 있기 때문에 결코 그렇게 잘 디자인하지 못했습니다. 그리고 그들은 모두 장단점이 있습니다. 어쨌든, 여기 내 문제가있다, 나는 많은 다른 느슨한 관련 클래스에 대한 유효성 검사가 필요하다. 그러나 이러한 클래스 중 일부는 유효성 검사를 수행하는 데 추가 정보가 필요합니다. 객체를 확인하는 데 사용할 수있는 validate
메소드를 갖고 싶습니다. 객체가 인터페이스로 유효성을 검사 할 수 있는지, 예를 들어 Validatable
이라고 말하고 싶습니다. 다음은 내가 가질 수있는 두 가지 기본 솔루션입니다.Validate 인터페이스를위한 상속의 디자인
interface Validatable {
public void validate() throws ValidateException;
}
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate() throws ValidateException {
throw new UnsupportedOperationException();
}
}
class Object2 implements Validatable {
...
public void validate() throws ValidateException {
...
}
}
이 내가 validatable 구현 내가 유효성을 검사 할 validate()
를 사용할 수있어 일반 전역 인터페이스 뭔가를함으로써 최초의 솔루션이지만, 오브젝트 1이이 그래서의 defunc 종류의 지원하지 않지만 Object2 그것을 지원합니다 그래서 많은 다른 수업이있을 수 있습니다.
다른 방법으로는 최상위 인터페이스없이 나를 버릴 수도 있습니다.
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate(Object1Converse converse) throws ValidateException {
...
}
}
interface Object2Validatable {
public void validate() throws ValidateException;
}
class Object2 implements Object2Validatable {
...
public void validate() throws ValidateException {
...
}
}
나는 내가 가지고있는 가장 큰 문제는 내가 종류의 나는 적어도 X 또는 Y 개체가 validatable 말할 수 있도록 최고 수준의 인터페이스를 가지고있는 아이디어의 붙어 있다고 생각합니다. 이것에 대해
타입 검사와 아무런 문제없이 효과적으로 validate 메소드로 전달 될 수있는 것은 문제를 일으킬 수 있습니다. –
미래의 개발자에게 아무 정보도 전달하지 않으므로 Object를 사용하지 않을 것이므로 형식을 validator 개체로 제한했습니다. 나는 여전히 다른 행동 (자기 자신과 외부 적으로 유효성을 검사 할 수있는)에 공통적 인 인터페이스를 적용하려고 할 때 잘못된 점이 있다고 생각한다. – Jean
어쩌면 당신 말이 맞을 수도 있습니다. 아마도 Class (또는 Object 현재 상속 된 인터페이스)에 메서드를 추가하는 경우 일 수 있습니다. –