Я никогда не был так хорош в дизайне, потому что есть так много разных возможностей, и у них у всех есть свои плюсы и минусы, и я никогда не уверен, с кем идти. В любом случае, вот моя проблема, мне нужно, чтобы много разных классов, связанных со свободным доступом, проходили валидацию. Однако некоторым из этих классов потребуется дополнительная информация для проверки. Я хочу иметь метод validate
, который можно использовать для проверки объекта, и я хочу определить, можно ли проверить объект с помощью интерфейса, скажем, Validatable
. Ниже приведены два основных решения, которые я могу иметь.
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 {
...
}
}
Это первое решение, благодаря которому у меня есть общий глобальный интерфейс, который реализует что-то, что можно проверить, и я мог бы использовать validate()
для проверки, но Object1 не поддерживает это, так что это своего рода 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 объект валиден.