串行验证该用什么设计模式?

我要对一个对象验证,不是对象自己的属性。

举例:比如对订单验证,

1要验证商品库存是否大于0,不大于0抛出异常。

2要验证订单中钱款是否与支付的钱款一致,不一致抛出异常。

3验证优惠卷号是否已经使用。

4....

只有所有验证都通过才能成功,任何一个验证不通过则失败。

随着业务的增加,验证还会继续增加。

这个该用什么设计模式实现呢?

7个回答

你好,如果你用的是springmvc,可以采用JSR-303协议进行验证,不仅可以满足业务类自身属性的细致检验。还可以进行业务逻辑检验,当然只是这个业务类自身的业务逻辑检验,比如,开始时间必须大于当前时间,金钱必须大于20000.00等。我个人研究且做过,只需创建一个业务验证类即可,再controller层直接拦截,返回可识别信息。

设计模式springmvc

工厂方法模式:抽象产品是一个包含抽象方法的抽象类,,具体产品继承抽象产品,具体产品是具体的验证方法对象(如验证商品库存和验证订单,这就是两个具体产品)。抽象工厂是一个包含抽象方法的抽象类(该抽象方法返回一个抽象产品对象),具体工厂继承抽象工厂,具体工厂返回具体产品对象。
再结合职责链模式,用于设置不同验证之间的先后顺序。

奇偶校验 代码和校验 循环冗余校验(CRC校验)

逐个验证遇到不符合条件的直接返回,还是所有都要验证并返回所有验证的结果呢?

tuablove
请叫我Tobin 直接返回
2 年多之前 回复

挨个校验,true继续下一个校验,false返回不就行了??

如果一定要使用设计模式,可以考虑包装模式,将对象包装,在外层包装类进行数据验证,
也就是功能增强,这样如果新增验证条件可以在包装类中添加而不必直接改动实际数据对象,
代理模式也是可以考虑的,代理对象进行验证,验证通过调用实际数据对象,具体使用什么
设计模式应该根据具体情况来设计,一味的追求设计模式而不考虑实际情况也不可取

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐