发布于 2020-04-24 18:20:50
我要说的是,枚举和策略模式并没有真正地混合在一起。
枚举的理想用例是表示一组详尽的选择。例如,表示星期一到星期日的DayOfWeek。使用这种方法的问题是,除了不能自动绑定任何其他bean之外,您的枚举还会随着验证数量的增加而不断增长。
策略模式允许您使用可能的无限数量的策略,前提是它遵守合同。以Collections.sort(List list, Comparator c)为例。可能的比较器没有详尽的列表,因为它永远不可能满足每个人的用例。
将每个可能的策略定义为一个组件更有意义
@Component
class NonNullValidationStrategy implements ValidationStrategy {
private final MyService service;
//constructor
@Override
public boolean isValid(MyClass foo) {
return foo != null;
}
}您如何在需要的时候获得正确策略的实例将取决于您没有提供的细节。也许使用限定符进行自动装配是一种可能性。
Spring已经有了它的own way of defining validations, via interfaces and annotations。我建议你在推出自己的解决方案之前先追求这一点。
发布于 2020-04-24 18:59:56
它建议使用javax.validation组,请查看有关它的更多信息,尤其是here @Validated(OnCreate.class)
如果您想要在控制器级别应用策略模式,请参阅this article,尤其是,因为这里描述的并不是一个非常干净的解决方案。
https://stackoverflow.com/questions/61393584
复制相似问题