首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重构 - 完全不用 if-else 可能吗?

上次那篇重构-为什么 if-else 不是好代码 说到代码中 if-else会随着代码量增加,在迭代过程中变越来越难以维护, 然后用工厂模式思路可以把 if-else代码块给剥离开来, 不过有朋友提出了不足...但其实想完全不用 if-else也是可能,还是以上次那段代码为例子来说, 这是最终在调用端代码 TargetExecutor executor = ExecutorFactory.getExecutor...getExecutor()这个方法,这里一堆 if-else, 可以看到这里面的逻辑是根据 target 字符串不同内容实例化不同 executor对象给调用者使用, 也就是说,这里是一种多对多模式...在准备工作做到这里后,我们就需要来把工厂中 if-else摘除了, 我们把之前条件判断改成了从一个 map 中遍历查找匹配模式,虽然从逻辑上来说,遍历查找跟 if-else差不多, 但代码会变更简洁...,可以在重构代码时候让整个代码逻辑清晰很多, 但是也有弊端, 因为需要通过 pattern 去查找匹配,就会有可能出现 pattern 类似或者重叠情况,一不小心就会导致bug...

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

帮你干掉过多if-else

日常开发,if-else语句写不少吧??...当逻辑分支非常多时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡,总想着解锁新姿势...:干掉过多if-else!!!...1、优先判断条件,不满足及时中断 这点非常容易理解,就是说在业务逻辑里面,先把不符合条件给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下: 2.策略模式改造 先用策略模式替换掉文章开头讲到...,但是还是没和if-else彻底说拜拜,且recharge()充值方法可单独拎出来,只需要根据priceCode实例化不同策略对象即可: 3、策略模式+工厂+单例模式,锦上添花 接下来使用"工厂类+

45141

FMEA:为可能发生故障制定对策,确保可靠性!

为了保证神舟载人飞船安全可靠性,有一项与之密切相关技术,叫做“FMEA”“潜在故障模式及其后果分析”。航天科技集团五院总设计师神舟飞船表示,“我们已经分析整理了全船所有设备可能出现故障。...对于每一个识别出可能出现故障现象,我们都制定了相应故障预案,并在实地充分验证了故障预案。我们有上百个计划。...图片总设计师提到失效方案是基于FMEA技术分析方法,包括从飞行、对接、对接、返回等各个阶段失效模式和对策分析。...例如,在飞行阶段,如果火箭发生火灾、爆炸或其他意外故障,神舟飞船可以借助其上部逃生塔迅速将宇航员带出危险区。并且依靠降落伞来实现安全着陆,就像战斗机遇到紧急重大危险情况时可以紧急弹射一样。...在一篇关于神舟七号科学论文《神七任务载人航天发射场主要技术管理与创新》中,特别提到“根据以可靠性为中心维修理论,应用故障模式及其后果分析(FMEA)方法确定关键设备,通过逻辑决策分析和维修检测周期计算确定维修策略

46130

过多 if-else 分支优化

我想谈一谈这个话题是因为我上一篇博客在 ITEye 上有一些朋友回复,说 if-else 过多分支可以使用 switch 或者责任链模式等等方式来优化。...反之,某一些精巧设计,可能会带来可阅读性和可理解性下降问题。 寻找代替分支判断方式 接下去我们再来考虑怎么样去重构优化过多 if-else 分支。 程序逻辑最基本组成就是分支、判断和循环。...而过多 if-else 正是由于在某一个变化点上,有许多判断条件和结果分支造成。所以最基本解决办法就是把多个判断条件合成一个,也就是把若干个分支合成一个。...但是在大多数情况下,条件判断分支都是无法合并。所以,我们需要把这个变化点通过别的途径封装起来,而不是采用 if-else。 1....这些都不错,至少比那些老说用 switch 来代替 if-else 有价值多了 :) 最后,对于如此小一个问题,我要补充说明一点是,看不得大片 if-else 和看不得大片 new 关键字一样,我觉得这是许多

55110

满屏if-else,看我怎么消灭你!

,经常会遇到复杂业务逻辑,可能部分同学实现出来代码并没有什么问题,但是代码可读性很差。...本篇文章主要总结一下自己在实际开发中如何避免大面积 if-else 代码块问题。补充说明一点,不是说 if-else 不好,而是多层嵌套 if-else 导致代码可读性差、维护成本高等问题。...此时你代码可能会写出如下形式: @RestController @RequestMapping("/activity") public class ActivityController {     @..., userId);         return Boolean.TRUE;     } } 看完这段代码,逻辑上是没有什么问题。但它有一个隐藏缺陷,如果后期又增加很多渠道时候,你该怎么办?...技巧五:设计模式 设计模式对于 if-else 优化,我个人觉得有些重,但是也是一种优化方式。设计模式适合使用在大业务流程和场景中使用,针对代码块中 if-else 逻辑优化不推荐使用。

98161

策略+枚举 优雅解决 if-else

等到编程能力渐渐提升之后,再回过头去看曾经写过满屏if-else时,脑海里只有一个画面,全都是翔..... 可能初学者都会忽略掉一点,其实if-else是一种面向过程实现。...虽说避免出现过多if-else,但是,却会增加很多额外类,我总觉得,很不实用,只能当做某种模式学习即可。...可以替换大量if-else语句,且具备较好可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。...如何使用呢,下面先从一个业务案例开始说起 假如有这样一个需求,需实现一周七天内分别知道要做事情备忘功能,这里面就会涉及到一个流程判断,你可能会立马想到用if-else,那么,可能是会这样实现—— 1...可能,会有这样一个疑问:为什么在枚举里定义一个抽象方法,会在各个枚举元素里实现呢? 这功能就类似子类继承父类做法了。DayEnum类似一个父类,DayEnum枚举里元素就相当是其子类。

32460

混沌故障演练如何尽可能保障生产环境不被破坏

由于演练对象和演练配置差异,在生产环境进行试验可能会对生产环境造成不确定影响,但混沌工程师责任和义务是确保这些后续影响最小化且被考虑范围。...因此,可以考虑以下方面尽可能保障生产环境演练不被破坏: 一、管理方面 1.1、演练人员要做到熟练使用,了解清楚具体某个实验配置/参数作用,做到有的放矢; 1.2、生产环境故障注入前,先在测试或者沙盒环境验证和测试..., 评估该故障对上下游影响范围,做到心中有数; 1.3、选择合适时间段进行演练:故障注入时间应选择空闲时段; 1.4、针对可能破坏演练,提前做好备份计划和容灾预案,以防不时之需。...由于混沌工程实验可能会给业务系统带来风险,所以对于爆炸半径控制要始终贯穿于整个实验过程: 2.1、针对所有的故障注入对象,通过matcher匹配器参数,筛选到故障注入点:实现Node、Pod、Container...此时,就需要做服务治理问题预防。当然,如果服务治理从来没出现过任何问题,这个可能价值就不会那么大。

45840

优化if-else代码八种方案

前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码八种方案。...优化方案一:提前return,去除不必要else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80 : 100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...比较多,是因为非空判断导致,这时候你可以使用java8Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多逻辑语句(if或case)来把它们找出来方法。 以下demo,把map抽象成表,在map中查找信息,而省去不必要逻辑语句。

63220

优化if-else代码八种方案!

前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码八种方案。 ?...优化方案一:提前return,去除不必要else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看做一种表驱动方法。...比较多,是因为非空判断导致,这时候你可以使用java8Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多逻辑语句(if或Case)来把它们找出来方法。以下demo,把map抽象成表,在map中查找信息,而省去不必要逻辑语句。

2.4K50

该不该扼杀过多if-else

面对过多if-else,代码可能看起来比较冗余,搞不好又是一张被人到处转发“我们项目几百几千行if”图。但是经过各种设计模式和封装,if大大减少,但可读性可能稍微降低了,而且比较抽象。...那我们应该如何取舍呢 抛开其他因素,如果if-else过多,可读性也许会好也可能会降低,可维护性也是或高或低;如果if-else少,代码高度抽象,可读性会低或者不变,可维护性可能会高也可能会低。...这里大概可能会有几种情况 if平铺条件单一 这种情况,if精简不精简,可读性是不会变,但是精简程度和可维护性是正相关。至于为什么,看一下代码就可以感受到了 ?...当条件有严格顺序要求、无规律可循,不建议强行减少if-else if条件有嵌套 嵌套实际上就是平铺增强,平铺嵌套平铺,我们可以当作是多个if平铺条件复杂情况来看。...可保持现状或者换成switch,如果不复杂可以使用map映射 条件复杂,执行语句单一,强烈建议减少if-else来优化;如果执行语句也复杂,当条件可以模块化且没有顺序要求,比较建议优化。

61910

优化if-else代码八种方案

前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码八种方案。 ?...优化方案一:提前return,去除不必要else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...比较多,是因为非空判断导致,这时候你可以使用java8Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多逻辑语句(if或case)来把它们找出来方法。以下demo,把map抽象成表,在map中查找信息,而省去不必要逻辑语句。

1K10

对复杂if-else代码块优化方案

if-else可能是最高频代码关键字,毕竟,这也比较符合人们二维思考问题方式,试想大部分问题答案都是只有两个维度,要么true,要么false,那么通过if-else方式是再好不过了。...当然,if-else固然好,但是在代码中过多使用,或者反复嵌套使用,那样就不好了。 前几天看到了下面这张图,固然这张图比较夸张,但是也说明了,多重嵌套if-else不可取之处。 ?...1.2 用switch-case优化 鉴于if-else控制逻辑冗余性,如果if-else分支间不存在关联性,那么首先想到解决方案是通过switch-case。...责任链模式链实际上是一个list对象,如果需要进入下一个嵌套,那么此处就不是写一个新if-else,而是将这个新if-else封装为一个对象,写在代码里面。...需要注意是,这是一种单一责任链,如果条件复杂情况下,可能会构成多个链。

97020

8种优化if-else代码方案请拿走

前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码八种方案。 ?...优化方案一:提前return,去除不必要else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...比较多,是因为非空判断导致,这时候你可以使用java8Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多逻辑语句(if或case)来把它们找出来方法。以下demo,把map抽象成表,在map中查找信息,而省去不必要逻辑语句。

1.2K20

故障定位更重要是:故障定界

前面发Observability文章,引起了不少共鸣,在群里或私聊时很多朋友提到一个点: 故障处理时,运维逻辑是快速恢复,所以根因是什么不重要,但是不知道根因发生位置在哪儿,怎么做应急处置呢...这是个非常好问题,这里我们就要区分两个经常挂在嘴边,但是确很少有人去能理解透彻概念:定界和定位。 我们讲故障时可以不用定位,指的是在故障时,不用去定位故障原因是什么,但是不能不做定界。...重要事情讲三遍: 定界和定位是两回事。 定界和定位是两回事。 定界和定位是两回事。 定界不做,那接下来恢复就无从谈起了。...举个简单场景案例: 当一次故障发生,业务指标受影响,硬件层面、网络层面、数据库层面,分布式组件层面、存储层面、应用层面,可能都会有告警。...我们不管是通过AIOps手段,还是Observability去观察,还是依赖运维专家经验,总会能做出一些问题所在位置基本判断。 有了定界,其实就可以指导后面的应急手段执行了。

1.2K30
领券