学习
实践
活动
专区
工具
TVP
写文章

Spring Boot ,如何干掉 if else

传统实现 根据订单类型写一堆的if else: ? 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: ? 现在可以了解到,我们主要的业务逻辑是处理器实现的,因此有多少个订单类型,就对应有多少个处理器。 ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,spring处理bean前,将自定义的bean注册到容器。 总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。 本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为订单的类型,相信你能想到更多更好的方法。

56610

Spring Boot ,如何干掉 if else

传统实现 根据订单类型写一堆的if else: ? 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: ? 现在可以了解到,我们主要的业务逻辑是处理器实现的,因此有多少个订单类型,就对应有多少个处理器。 ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,spring处理bean前,将自定义的bean注册到容器。 总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。 本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为订单的类型,相信你能想到更多更好的方法。

37510
  • 广告
    关闭

    2023新春采购节

    领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring Boot ,如何干掉 if else

    订单实体: service接口: 传统实现 根据订单类型写一堆的if else: 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: 可以看到上面的方法中注入了HandlerContext 现在可以了解到,我们主要的业务逻辑是处理器实现的,因此有多少个订单类型,就对应有多少个处理器。 HandlerProcessor: ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,spring处理bean前,将自定义的 总结 利用策略模式可以简化繁杂的if else代码,方便维护,而利用自定义注解和自注册的方式,可以方便应对需求的变更。 本文只是提供一个大致的思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为订单的类型,相信你能想到更多更好的方法。

    13960

    使用策略+工厂模式彻底干掉代码的if else

    其实,if-else是有办法可以消除掉的,其中比较典型的并且使用广泛的就是借助策略模式和工厂模式,准确的说是利用这两个设计模式的思想,彻底消灭代码的if-else。 这个例子以及策略模式的相关知识,读者可以《如何给女朋友解释什么是策略模式?》一文中学习。 但是,真正在代码中使用,比如在一个web项目中使用,上面这个Demo根本没办法直接用。 其实,之前的《如何给女朋友解释什么是策略模式?》一文,我们介绍了很多策略模式的优点。但是,策略模式的使用上,还是有一个比较大的缺点的: 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。 也就是说,虽然计算价格的时候没有if-else了,但是选择具体的策略的时候还是不可避免的还是要有一些if-else。 比如使用枚举,或者每个策略类自定义一个getUserType方法,各自实现即可。

    2.3K30

    面试官:你开发是如何消除 if-else 的?

    介绍更更优雅的编程之前,让我们一起回顾一下,不好的 if...else 代码 02 又臭又长的 if...else 废话不多说,先看看下面的代码。 02 消除 if...else 的锦囊妙计 2.1 使用注解 代码之所以要用 code 判断使用哪个支付类,是因为 code 和支付类没有一个绑定关系,如果绑定关系存在了,就可以不用判断了。 2.5 责任链模式 这种方式代码重构时用来消除 if...else 非常有效。 责任链模式:将请求的处理对象像一条长链一般组合起来,形成一条对象链。 2.6 其他的消除 if...else 的方法 当然实际项目开发中使用 if...else 判断的场景非常多,上面只是其中几种场景。下面再列举一下,其他常见的场景。 2.6.4 spring 的判断 对于参数的异常,越早被发现越好, spring 中提供了 Assert 用来帮助我们检测参数是否有效。

    13720

    策略枚举:消除项目里大批量使用if-else的正确姿势

    那么,如何消除项目里大量使用if-else呢? 网络上有很多解决思路,有工厂模式、策略模式、甚至是规则引擎(这个太重了吧)...... 这些,都有一个共同的缺点,使用起来还是过于繁重了。 真正在项目中能替换大量if-else语句,且具备较好的可读性与扩展性的,同时显得比较轻量化的,我比较推荐使用策略枚举来消除if-else。 ("Thursday".equals(day)){ ...... } } 那么,策略枚举下应该如何使用从而避免代码冗余呢? 我很喜欢大批量if-else使用策略枚举来消除替换,总而言之,使用策略枚举可以很灵活处理各种复杂判断,且可读性与扩展性都比较好,它更像是函数式编程,即传进一个参数,就可以得到对应模式下返回的数值。 若Java里业务逻辑中大批量使用if-else,则是面向过程了,因为业务逻辑里的if-else是从上往下一个if接一个if判断下去的,各个if上打个断点,debug下去,就明白它其实是面向过程的。

    44710

    Python循环的else、break、continue使用方法详解(python工程狮)

    pythonelse, break, continue一般搭配使用 我们常用的循环包括:for循环以及while循环,他们结合else, break, continue使用的方法和结果都是一样的 我们通过下面的几个案例来交接一下详细的用法: for循环语句是python的循环控制语句。 通常用来遍历某一对象(字符串、列表、元组、字典等),它具有一个附带的可选else块,主要用于处理for语句中包含的break语句 当for循环未被break终止时,程序会执行else的语句 break 需要时终止for循环 continue 跳过位于其后的语句,开始下一轮循环 当for/while循环正常执行之后,程序会继续执行else语句中内容 以下示例,将结合range()函数讲解,python 跳出而中断时,不会再执行else的内容!

    1K20

    C++fstream_使用

    C++处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。 作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。 如果只执行输入,使用ifstream类;如果只执行输出,使用 ofstream类;如果要对流执行输入和输出,使用fstream类。可以将文件名称用作构造函数参数。 被打开的文件程序由一个流对象(stream object)来表示 (这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。 http://www.cplusplus.com/reference/fstream/fstream/列出了fstream可以使用的成员函数。

    11210

    Transformer RxJava使用

    早在 RxJava1.x 版本就有了Observable.Transformer、Single.Transformer和Completable.Transformer,2.x版本变成了ObservableTransformer 其实,大名鼎鼎的图片加载框架 Glide 以及 Picasso 也有类似的transform概念,能够将图形进行变换。 RxLifecycle的LifecycleTransformer trello出品的RxLifecycle能够配合Android的生命周期,防止App内存泄漏,其中就使用了LifecycleTransformer 我的项目中也使用了知乎的RxLifecycle,根据个人的习惯和爱好,我对LifecycleTransformer稍微做了一些修改,将五个Transformer合并成了一个。 .... } 如果你想在RxJava的链式调用使用缓存,还可以考虑使用transformer的方式,下面我写了一个简单的方法 /** * Created by Tony Shen on

    2.5K20

    XML SQLServer使用

    当你用XML数据类型配置这些对象的一个时,你指定类型的名字就像你SQLServer 中指定一个类型一样。 XML的数据类型确保了你的XML数据被完好的构建保存,同时也符合ISO的标准。 定义一个XML数据类型之前,我们首先要知道它的几种限制,如下: 一个实例的XML列不能包含超过2GB的数据。 一个XML的列不能是索引。 XML对象不能使用Group By的子句中。 ,括号内添加了@id的值,结果如下 <Person id="1234"> <FirstName>John</FirstName> <LastName>Doe</LastName> </Person ,我指定了[1]Xquery表达式的后面,所以结果集将只返回第一个人的名字。 总结 我们基本上了解了XMLSQLServer 的简单应用,从定义到使用方法。也看到了query()检索子集,也能使用value()检索独立的元素属性的值。

    45670

    HTML如何使用CSS?

    一、前言 HTML 中使用 CSS,包括内联式、内嵌式、链接式和导入式。 2.3 链接式 实际的网页设计,链接式 CSS 用法是最常用的,也是效果最好的。 使用链接式 CSS,可以设计整个网站时,将多个页面都会用到的 CSS 样式定义一个或多个 文件,然后需要用到该样式的 HTML 网页通过 标记链接这些 文件,通过链接式 CSS 可以降低整个网站的页面代码冗余并提高网站的可维护性 例如,可以 文件不写任何 CSS 代码,只写 ,这样所有导入或链接到该 CSS 文件的 HTML 页面都可以使用 定义的所有样式效果。 这时解决 CSS 冲突你就要了解 HTML 中使用 CSS 的优先级规则: 内联式 > 内嵌式 > 外部样式; 多个样式,后出现的样式的优先级高于先出现的样式; 样式,选择器的优先级: 样式

    443100

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 云服务器

      云服务器

      云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券