首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java8和服务注入的策略模式

使用java8和服务注入的策略模式
EN

Stack Overflow用户
提问于 2020-04-24 01:38:51
回答 2查看 440关注 0票数 0

我正在尝试为一些自定义验证实现Strategy模式,它不只涉及具有基本操作的验证输入,但我确实需要调用一些其他服务来验证数据。

在开始时,我使用了前面提到的示例here,它使用枚举来实现不同的策略,但当然不可能将我的服务注入到枚举中,所以为了更清楚起见,现在我看一下利用Java8的this

我的想法是有一个接口,有一个方法validate(),并有不同对象的通用输入,我可以发送它,然后实现该接口的类将基于对象类型具有不同的验证,并将请求分派到不同的服务,但另一方面,我有点失去了拥有不同策略的枚举优势,例如,我可以根据特定用户设置选择不同的策略。

你知道怎样才能同时拥有这两个优点吗?

EN

回答 2

Stack Overflow用户

发布于 2020-04-24 18:20:50

我要说的是,枚举和策略模式并没有真正地混合在一起。

枚举的理想用例是表示一组详尽的选择。例如,表示星期一到星期日的DayOfWeek。使用这种方法的问题是,除了不能自动绑定任何其他bean之外,您的枚举还会随着验证数量的增加而不断增长。

策略模式允许您使用可能的无限数量的策略,前提是它遵守合同。以Collections.sort(List list, Comparator c)为例。可能的比较器没有详尽的列表,因为它永远不可能满足每个人的用例。

将每个可能的策略定义为一个组件更有意义

代码语言:javascript
复制
@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。我建议你在推出自己的解决方案之前先追求这一点。

票数 0
EN

Stack Overflow用户

发布于 2020-04-24 18:59:56

它建议使用javax.validation组,请查看有关它的更多信息,尤其是here @Validated(OnCreate.class)

如果您想要在控制器级别应用策略模式,请参阅this article,尤其是,因为这里描述的并不是一个非常干净的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61393584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档