我需要帮助设计我的代码。 假设我有一个表示字段元数据的界面
public interface FieldDefinition {
boolean validate(Object value)
FieldTypeDefinition getFieldTypeDefinition()
}
以及实现此接口的类(我不在这里写所有上下文,例如属性),
public class SomeFieldDefinition implements FieldDefinition {
@Override
public boolean validate(Object value) {
// some general validation logic
}
@Override
public FieldTypeDefinition getFieldTypeDefinition() {
// return NumericFieldTypeDefinition or StringFieldTypeDefinition
}
}
public class SomeFieldDefinition2 implements FieldDefinition {
@Override
public boolean validate(Object value) {
// some general validation logic
}
@Override
public FieldTypeDefinition getFieldTypeDefinition() {
// return NumericFieldTypeDefinition or StringFieldTypeDefinition
}
}
现在,FieldTypeDefinition也是一个接口
public interface FieldTypeDefinition {
public String getTypeName();
boolean validate(FieldDefinition fieldDefinition,Object value);
}
我有实现它的具体类
public class StringFieldTypeDefinition implements FieldTypeDefinition {
@Override
public String getTypeName() {
return "String";
}
@Override
public boolean validate(FieldDefinition fieldDefinition, Object value) {
// some specific field of type string validations by fieldDefinition type
}
}
public class NumericFieldTypeDefinition implements FieldTypeDefinition {
@Override
public String getTypeName() {
return "Number";
}
@Override
public boolean validate(FieldDefinition fieldDefinition, Object value) {
// some specific field of type number validations by fieldDefinition type
}
}
现在,当我想对字段进行一些验证时,我希望进行一般验证,并通过字段类型进行特定验证。 所以假设我在SomeFieldDefinition2上使用String参数调用方法validate,方法将如下所示:
public boolean validate(Object value) {
// some general validation logic
getFieldTypeDefinition().validate(this, value); // getFieldTypeDefinition() returns StringFieldTypeDefinition
}
这导致了一个问题,因为在 StringFieldTypeDefinition 类的验证方法中,我需要检查fieldDefinition参数的实例,并通过其值,制作合适的验证逻辑, 因为在每个FieldDefinition类型类中,我都有不同的逻辑和元数据。
有没有更好的方法来设计我的代码? 我希望我的问题是可以理解的。