上次那篇重构-为什么 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...
for 循环 功能 for 循环是一种迭代循环机制,迭代即重复相同的逻辑操作,每次的操作都是基于上一次的结果而进行的。...并且for循环可以遍历任何序列的项目,如一个列表或者一个字符串 语法 for 循环的一般格式如下: for in 注释:variable...为变量,用于控制被迭代的对象;sequence 是可迭代的对象多为列表或者字符串 for循环实例: str="hello" for i in str : print(i) 运行结果:...str[i]) 运行结果: D:\Anaconda3\python.exe D:/PycharmProjects/pythonz/day1/boke.py 1 hu 2 jin 3 xie 4 xu if-else...判断语句可以是任何表达式,任何非零或非空的值均为True。
日常开发,if-else语句写的不少吧??...当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势...:干掉过多的if-else!!!...1、优先判断条件,不满足及时中断 这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下: 2.策略模式改造 先用策略模式替换掉文章开头讲到的...,但是还是没和if-else彻底说拜拜,且recharge()充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可: 3、策略模式+工厂+单例模式,锦上添花 接下来使用"工厂类+
为了保证神舟载人飞船的安全可靠性,有一项与之密切相关的技术,叫做“FMEA”“潜在故障模式及其后果分析”。航天科技集团五院总设计师神舟飞船表示,“我们已经分析整理了全船所有设备可能出现的故障。...对于每一个识别出的可能出现的故障现象,我们都制定了相应的故障预案,并在实地充分验证了故障预案。我们有上百个计划。...图片总设计师提到的失效方案是基于FMEA技术的分析方法,包括从飞行、对接、对接、返回等各个阶段的失效模式和对策分析。...例如,在飞行阶段,如果火箭发生火灾、爆炸或其他意外故障,神舟飞船可以借助其上部逃生塔迅速将宇航员带出危险区。并且依靠降落伞来实现安全着陆,就像战斗机遇到紧急重大危险情况时可以紧急弹射一样。...在一篇关于神舟七号的科学论文《神七任务载人航天发射场主要技术管理与创新》中,特别提到“根据以可靠性为中心的维修理论,应用故障模式及其后果分析(FMEA)方法确定关键设备,通过逻辑决策分析和维修检测周期计算确定维修策略
我想谈一谈这个话题是因为我的上一篇博客在 ITEye 上有一些朋友回复,说 if-else 过多的分支可以使用 switch 或者责任链模式等等方式来优化。...反之,某一些精巧的设计,可能会带来可阅读性和可理解性下降的问题。 寻找代替分支判断的方式 接下去我们再来考虑怎么样去重构优化过多的 if-else 分支。 程序逻辑最基本的组成就是分支、判断和循环。...而过多 if-else 正是由于在某一个变化的点上,有许多判断条件和结果分支造成的。所以最基本的解决办法就是把多个判断条件合成一个,也就是把若干个分支合成一个。...但是在大多数情况下,条件判断的分支都是无法合并的。所以,我们需要把这个变化点通过别的途径封装起来,而不是采用 if-else。 1....这些都不错,至少比那些老说用 switch 来代替 if-else 的有价值多了 :) 最后,对于如此小的一个问题,我要补充说明的一点是,看不得大片 if-else 和看不得大片 new 关键字一样,我觉得这是许多
,经常会遇到复杂的业务逻辑,可能部分同学实现出来的代码并没有什么问题,但是代码的可读性很差。...本篇文章主要总结一下自己在实际开发中如何避免大面积的 if-else 代码块的问题。补充说明一点,不是说 if-else 不好,而是多层嵌套的 if-else 导致代码可读性差、维护成本高等问题。...此时你的代码可能会写出如下形式: @RestController @RequestMapping("/activity") public class ActivityController { @..., userId); return Boolean.TRUE; } } 看完这段代码,逻辑上是没有什么问题的。但它有一个隐藏的缺陷,如果后期又增加很多渠道的时候,你该怎么办?...技巧五:设计模式 设计模式对于 if-else 的优化,我个人觉得有些重,但是也是一种优化方式。设计模式适合使用在大的业务流程和场景中使用,针对代码块中的 if-else 逻辑优化不推荐使用。
转载自joshua317博客 https://www.joshua317.com/article/24 1.通过set_fact模块可以在tasks中定义变量,yaml文件内容如下: #要部署的远程服务器...vars: var1: var1_string tasks: - shell: "echo var2_string" register: shellReturn - set_fact...地址赋值给SERVER_IP变量 - set_fact: SERVER_IP: "{{shellReturn.stdout}}" 3.通过template模块替换文件里面的SERVER_IP...举例说明 首先需要有一个.j2后缀的文件,如php.ini.j2,里面的内容有变量SERVER_IP ENV.HOST_IP = "{{ SERVER_IP }}" 通过template模块替换如下:...,php.ini文件的里面的ENV.HOST_IP值,已经变成了SERVER_IP对应的值。
等到编程能力渐渐提升之后,再回过头去看曾经写过的满屏if-else时,脑海里只有一个画面,全都是翔..... 可能初学者都会忽略掉一点,其实if-else是一种面向过程的实现。...虽说避免出现过多的if-else,但是,却会增加很多额外的类,我总觉得,很不实用,只能当做某种模式的学习即可。...可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。...如何使用呢,下面先从一个业务案例开始说起 假如有这样一个需求,需实现一周七天内分别知道要做事情的备忘功能,这里面就会涉及到一个流程判断,你可能会立马想到用if-else,那么,可能是会这样实现—— 1...可能,会有这样一个疑问:为什么在枚举里定义一个抽象方法,会在各个枚举元素里实现呢? 这功能就类似子类继承父类的做法了。DayEnum类似一个父类,DayEnum枚举里的元素就相当是其子类。
方法一:来自http://biancheng.dnbcw.net/python/417264.html
由于演练对象和演练配置的差异,在生产环境进行试验可能会对生产环境造成不确定的影响,但混沌工程师的责任和义务是确保这些后续影响最小化且被考虑的范围。...因此,可以考虑以下方面尽可能保障生产环境的演练不被破坏: 一、管理方面 1.1、演练人员要做到熟练使用,了解清楚具体某个实验的配置/参数的作用,做到有的放矢; 1.2、生产环境故障注入前,先在测试或者沙盒环境验证和测试..., 评估该故障对上下游的影响范围,做到心中有数; 1.3、选择合适的时间段进行演练:故障注入时间应选择空闲时段; 1.4、针对可能破坏的演练,提前做好备份计划和容灾预案,以防不时之需。...由于混沌工程实验可能会给业务系统带来风险,所以对于爆炸半径的控制要始终贯穿于整个实验过程: 2.1、针对所有的故障注入对象,通过matcher匹配器参数,筛选到故障注入点:实现Node、Pod、Container...此时,就需要做服务治理的问题预防。当然,如果服务治理从来没出现过任何问题,这个可能价值就不会那么大。
前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。...优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80 : 100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...比较多,是因为非空判断导致的,这时候你可以使用java8的Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或case)来把它们找出来的方法。 以下的demo,把map抽象成表,在map中查找信息,而省去不必要的逻辑语句。
前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。 ?...优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看做一种表驱动方法。...比较多,是因为非空判断导致的,这时候你可以使用java8的Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或Case)来把它们找出来的方法。以下的demo,把map抽象成表,在map中查找信息,而省去不必要的逻辑语句。
面对过多的if-else,代码可能看起来比较冗余,搞不好又是一张被人到处转发的“我们项目几百几千行if”的图。但是经过各种设计模式和封装,if大大减少,但可读性可能稍微降低了,而且比较抽象。...那我们应该如何取舍呢 抛开其他因素,如果if-else过多,可读性也许会好也可能会降低,可维护性也是或高或低;如果if-else少,代码高度抽象,可读性会低或者不变,可维护性可能会高也可能会低。...这里大概可能会有几种情况 if平铺条件单一 这种情况,if精简不精简,可读性是不会变的,但是精简程度和可维护性是正相关的。至于为什么,看一下代码就可以感受到了 ?...当条件有严格顺序要求、无规律可循,不建议强行减少if-else if条件有嵌套 嵌套实际上就是平铺的增强,平铺嵌套平铺,我们可以当作是多个if平铺条件复杂的情况来看。...可保持现状或者换成switch,如果不复杂可以使用map映射 条件复杂,执行语句单一,强烈建议减少if-else来优化;如果执行语句也复杂,当条件可以模块化的且没有顺序要求,比较建议优化。
前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。 ?...优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...比较多,是因为非空判断导致的,这时候你可以使用java8的Optional进行优化。...表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或case)来把它们找出来的方法。以下的demo,把map抽象成表,在map中查找信息,而省去不必要的逻辑语句。
代码示例 package com.cwl.po.judge; /** * @program: cwl-performance-optimization * @description: 测试If和If-Else...的性能 * @author: ChenWenLong * @create: 2019-11-27 10:34 **/ public class TestIfElse { // 当我们是两种情况进行判断...使用多个If 会比使用If-else要更多消耗一些性能 public static void main(String[] args) { System.out.println(...));// 190ms System.out.println(testIfElse());// 112ms } /** * 功能描述: * 〈测试If-Else...end = System.currentTimeMillis(); return end - begin; } /** * 功能描述: * 〈测试单纯的使用
背景 在日常开发中,经常会需要监听某种数据的新增、删除、修改。...mqMessageDTO); e.printStackTrace(); return false; } } } 这样如果类型较多会有大量if-else...分支逻辑,我们可以换一种模式实现 定义三个不同类型的Handler @Component @HandlerAnnotation(MQMessageDTO.MsgType.DELETE) public class...RetentionPolicy.RUNTIME) public @interface HandlerAnnotation { MQMessageDTO.MsgType value(); } 工厂初始化的时候...configurableListableBeanFactory.registerResolvableDependency(HandlerContext.class, handlerContext); } } 替换过的实现
,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封装为一个对象,写在代码里面。...需要注意的是,这是一种单一的责任链,如果条件复杂的情况下,可能会构成多个链。
2.look-up表代替if-else 比如大家可能会遇到类似下面的需求:比如某平台的信用分数评级,超过700-950,就是信用极好,650-700信用优秀,600-650信用良好,550-600信用中等...日后的维护可能存在问题。...这样执行没错,但是写出来的代码可能像下面这样,风格不统一。...比如if-else不是很多,if判断的逻辑不统一的使用,还是建议使用if-else方式实现。但是神仙数字,要清除。...使用对象,编写业务逻辑可能更灵活 使用对象可以使得配置数据和业务逻辑分离。好处参考上一部分内容。 4.小结 最近在特定场合下,代替if-else和switch的解决方案就是这么多了。
前面发的Observability的文章,引起了不少的共鸣,在群里或私聊时很多朋友提到一个点: 故障处理时,运维的逻辑是快速恢复,所以根因是什么不重要,但是不知道根因发生的位置在哪儿,怎么做应急处置呢...这是个非常好的问题,这里我们就要区分两个经常挂在嘴边,但是确很少有人去能理解透彻的概念:定界和定位。 我们讲故障时可以不用定位,指的是在故障时,不用去定位故障原因是什么,但是不能不做定界。...重要的事情讲三遍: 定界和定位是两回事。 定界和定位是两回事。 定界和定位是两回事。 定界不做,那接下来的恢复就无从谈起了。...举个简单的场景案例: 当一次故障发生,业务指标受影响,硬件层面、网络层面、数据库层面,分布式组件层面、存储层面、应用层面,可能都会有告警。...我们不管是通过AIOps的手段,还是Observability去观察,还是依赖运维专家的经验,总会能做出一些问题所在位置的基本判断。 有了定界,其实就可以指导后面的应急手段执行了。
领取专属 10元无门槛券
手把手带您无忧上云