非常に多くの異なる可能性があり、それらにはすべて長所と短所があり、どれを使用すればよいかわからないため、私はデザインが得意ではありません。とにかく、ここに私の問題があります。さまざまなゆるやかに関連するクラスを検証する必要があります。ただし、これらのクラスの中には、検証を行うために追加情報が必要なものもあります。オブジェクトを検証するために使用できるメソッドvalidate
が必要であり、オブジェクトがインターフェイスで検証可能かどうかを判断したいと考えていますValidatable
。以下は、私が持つことができる2つの基本的な解決策です。
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 {
...
}
}
これは、検証可能な何かが実装され、検証に使用できる一般的なグローバルインターフェイスを持つ最初のソリューションですが、Object1validate()
はこれをサポートしていないため、一種の機能不全ですが、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オブジェクトが検証可能であると言えるように、トップレベルのインターフェースを持つという考えに固執していることだと思います。