【问题标题】:Different Validator For Create and Update in Spring MVCSpring MVC 中创建和更新的不同验证器
【发布时间】:2016-10-13 10:37:34
【问题描述】:

我在创建和更新实体时寻找不同的表单验证样式。

例如,当我创建一个“UserClass”对象时,它需要一个 ID 来定义,但是当我更新时,我不再需要 ID,因为它是由用户在创建步骤中定义的。我有很多实体,我需要找到最合适的方法。

例如,这是合乎逻辑的吗?

public interface RecordGroupValidator {

    public void validateNew(RecordGroup recordGroup, Errors errors);

    public void validateUpdate(RecordGroup recordGroup, Errors errors);
}

验证器:

public class RecordGroupValidatorImpl implements RecordGroupValidator {

    @Autowired
    RecordGroupService recordGroupService;

    @Override
    public void validateNew(RecordGroup recordGroup, Errors errors) {
        if (!ValidationHandler.validText(recordGroup.getIds())) {
            errors.rejectValue(ColumnIdentifier.COLUMN.Ids.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText());
        }
        if (!ValidationHandler.validText(recordGroup.getName())) {
            errors.rejectValue(ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText());
        }
        if (recordGroup.getRecordGroupType() == null) {
            errors.rejectValue(ColumnIdentifier.COLUMN.RecordGroupType.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText());
        }
        if (recordGroupService.idsExist(recordGroup.getIds())) {
            errors.rejectValue(ColumnIdentifier.COLUMN.Ids.name(), TextParameters.SERVLET_RESPONSE.DuplicateEntry.getText());
        }
        if (recordGroupService.nameExist(recordGroup.getName())) {
            errors.rejectValue(ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.DuplicateEntry.getText());
        }
}

    @Override
    public void validateUpdate(RecordGroup recordGroup, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, ColumnIdentifier.COLUMN.Name.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText());
        if (recordGroup.getRecordGroupType() == null) {
            errors.rejectValue(ColumnIdentifier.COLUMN.Type.name(), TextParameters.SERVLET_RESPONSE.InvalidParameter.getText());
        }
    }
}

【问题讨论】:

    标签: spring validation crud


    【解决方案1】:

    我认为你应该创建两个验证。一个用于创建,一个用于更新。这将创建巧妙的架构。因为现在你只有一个不同,但在未来你可以有更多。在我看来,您现在应该拆分它们。

    【讨论】:

    • 上面的例子怎么样?对于一个实体,我为创建操作定义了“validateNew”方法,为更新操作定义了“validateUpdate”方法。这可行,但很难对数十个实体应用相同的方法。
    • 对我来说最好写更多的代码,但是当你想添加新功能时可以很容易地添加它。但是可以写一些常用的逻辑,在两个方法中调用。或者你可以尝试写一些带有反射的动态代码。
    • 我也是,我更喜欢写更多更清晰的代码。但是在专业领域,开发人员可以说您编写了很多代码。在我开发代码时,我尝试做得更专业,但我不确定自己在做什么。
    • 他们可以说他们想说的。如果他们不了解良好做法,那就是他们的问题。
    • 我也有同样的问题,但我认为我们可以说这是值得讨论的,具体取决于具体情况,尤其是您正在使用的对象的架构和重要性。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2021-12-07
    • 2018-07-17
    相关资源
    最近更新 更多