gpt4 book ai didi

java - 基于输入的不同 validator

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:06 24 4
gpt4 key购买 nike

我正处于项目的设计阶段,需要对给定对象执行某些验证。验证可以分为 5 个不同的组。每个单独类别的 validator 都可以有多个版本,它们的实现略有不同。

public interface Validator {
boolean validate(Object o);
}

public abstract CostValidator implements Validator {
//common logic related to cost validator
}

public class CostValidator1 extends CostValidator {
boolean validate(Object o) {
//implementation 1
}

public class CostValidator2 extends CostValidator {
boolean validator(Object o) {
//implementation 2
}

根据对象的业务组,需要执行CostValidator1或CostValidator2。

对于每个业务组,我计划在配置系统中维护此类 validator 的列表,即:

BusinessGroupA {
validators = [CostValidator1, SomeOtherValidator2...]
}

BusinessGroupB {
validators = [CostValidator2, AnotherValidator99...]
}

enter image description here

处理流程将从基于业务组的配置中获取 validator 列表,并在每个包含的 validator 中执行验证。

这种方法有什么缺陷吗?或者是否有更好的方法来解决我描述的用例?

最佳答案

我建议对上述解决方案添加两个改进:

<强>1。保证存在所需的验证规则

假设应该为每个业务组执行相关验证,应该有一些机制来保证配置指定足够的验证规则,即验证类。如果你有几十个属性,也许有数百个业务组,那么很容易在配置中出错,即不为 ​​Cost 指定任何 validator 。我的建议是在业务对象级别指定哪些属性需要 validator 。然后创建某种对象工厂,根据业务组和验证要求将 validator 绑定(bind)到对象。

我会遵循这种方法:

  1. 为每种类型的验证创建一个接口(interface),例如ICostValidator 和 IWeightValidator。
  2. 在您的配置中保留业务对象所需的 validator 接口(interface)列表,例如:

    requiredValidators = [ICostValidator, IWeightValidator];

  3. 在 BusinessGroupA 或 BusinessGroupB 上执行验证时,始终检查配置的 validator 是否实现了所有必需的接口(interface)。

<强>2。将 validator 与特定业务对象分离

如果您现在查看成本和重量验证,它们已绑定(bind)到业务对象。我不知道你的类图的其余部分,但我可以想象成本和重量的属性会出现在多个业务对象中,例如 Item、QuotationLine、SalesOrderLine、ShippingLine 等。那么最好有 validator 不直接依赖于业务对象,可以方便地应用于多个业务对象。在对象工厂中,您还可以处理 validator 和底层对象之间的正确绑定(bind)。

如果您想要一些代码示例,请告诉我。

关于java - 基于输入的不同 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706213/

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