gpt4 book ai didi

java - Validate接口(interface)的继承设计

转载 作者:行者123 更新时间:2023-11-30 05:17:32 25 4
gpt4 key购买 nike

我从来没有这么擅长设计,因为有很多不同的可能性,它们都有优点和缺点,我从来不知道该选择哪一种。不管怎样,这是我的问题,我需要许多不同的松散相关的类来进行验证。然而,其中一些类需要额外的信息来进行验证。我想要一个可用于验证对象的方法 validate,并且我想确定对象是否可以通过接口(interface)进行验证,例如 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 {
...
}
}

这是第一个解决方案,我有一个通用的全局接口(interface),可验证的东西实现了,我可以使用 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 {
...
}
}

我认为我遇到的主要问题是我有点坚持拥有一个顶级接口(interface)的想法,这样我至少可以说 X 或 Y 对象是可验证的。

最佳答案

这个怎么样:

interface Validatable {
void validate(Validator v);
}

class Object1 implements Validatable{
void validate(Validator v){
v.foo
v.bar
}
}
class Object1Converse implements Validator{
//....
}
class Object2 implements Validatable{
void validate(Validator v){
//do whatever you need and ingore validator ?
}
}

如果 Object2 收到不需要的参数,你会关心什么?如果没有它也能正确操作,它可以忽略它,对吗?

如果您担心在 object2 和 Object1Converse 之间引入不必要的依赖关系,那么只需指定一个接口(interface)来解耦它们并将其用作 validator 。

现在我必须补充一点,拥有一个混合模型,其中既有能够 self 验证的对象,又有需要外部状态信息来验证的对象,这听起来很奇怪。

介意说明吗?

关于java - Validate接口(interface)的继承设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com