平时开发中if-else用的多吗? 其实这是个再正常不过的coding习惯,当我们代码量小的时候用来做条件判断是再简单不过的了。 但对于优秀程序员来说,这并不是好代码, 为啥?...如何重构掉这段代码 对于这种代码我们重构的目标可以有两个深度,看自己强迫症的严重程度决定 · 继续用 if-else,只达到剥离执行代码块 · 用工厂模式去耦合 对于这两种其实不是非此即彼的关系,而是优化深度不同...进一步优化 在上面的优化之后,如何再用工厂模式来继续重构呢? 从上的代码看的出来,不同的条件下,执行的逻辑是不同的,那么可以把这种执行逻辑抽象出来,用多态的概念来定义不同的执行方式。...在经过这一轮重构之后,我们之前在一个类里面写的那堆代码已经抽离到多个不同的类里了, 现在在原来的类里的代码变成怎样了呢, TargetExecutor executor = ExecutorFactory.getExecutor...(target); executor.process(); 重构之后各个Executor和主类中的耦合已经降到很低了, 而且代码整洁度提高了很多,之前那个类的一段50+行的代码变成了2行,这就是重构的意义
在工作中优化了一段冗余的if else代码块: 假如写一个针对员工上班不遵守制度做相应惩罚的程序,比如,上班迟到:罚100;上班睡觉:罚1000;上班早退:警告;上班玩游戏:严重警告;上班谈恋爱:开除等...("开除"); } } } 可以看到,每增加一种情况都要增加一个if else判断,这样会造成这段代码非常长,可读性差、不易维护。...下面就用静态工厂+策略模式来重构这段代码(对于静态工厂模式和策略模式不知道的同学请自行百度哈 先说说思路:1、定义一个处罚的接口 ,包含一个执行处罚的方法 2、每一种情况的处罚都抽象成一个具体处罚类并继承处罚接口...、清晰,后续新增一种情况,只需定义一个相应的类即可,根本不需要修改处罚逻辑,完全解耦合,这大大提高了代码的可读性和可维护性。...不过,运用静态工厂+策略模式,也存在弊端,那就是会增加很多类;但是,当每种情况的逻辑代码很多、很复杂的时候,那么这个弊端就可以忽略不计,其优势就完全展示出来了。
传统的实现方式 我们看下边的伪代码,大致就是重构前下单逻辑的代码,由于来源比较少,简单的做if-else逻辑判断足以满足需求。...现在每种订单来源的处理逻辑都有几百行代码,看着已经比较臃肿,可我愣是迟迟没动手重构,一方面业务方总像催命鬼一样的让你赶工期,想快速实现需求,这样写是最快;另一方面是不敢动,面对古董级代码,还是想求个安稳...但这次来源一下子增加几十个,再用这种方式做已经无法维护了,想象一下那种臃肿的if-else代码,别说开发想想都头大!...还有一些小伙伴纠结于性能问题,策略模式的性能可能确实不如if-else。 但我觉得吧增加一点复杂度、牺牲一丢丢性能,换代码的整洁和可维护性还是值得的。...总结 凡事都有他的两面性,if-else多层嵌套和也都有其各自的优缺点: if-else的优点就是简单,想快速迭代功能,逻辑嵌套少且不会持续增加,if-else更好些,缺点也是显而易见,代码臃肿繁琐不便于维护
原文链接:https://pdai.tech/md/develop/refactor/dev-refactor-if-else.html 最为常见的是代码中使用很多的if/else,或者switch/...方法特别多 出现if/else和switch/case的场景 重构思路 方式一 - 工厂类 方式二 - 枚举 方法三 - 命令模式 方法四 - 规则引擎 方法五 - 策略模式 一些反思 出现if/else...和switch/case的场景 通常业务代码会包含这样的逻辑:每种条件下会有不同的处理逻辑。...add": result = a + b; break; // other cases } return result; } 这种最基础的代码如何重构呢...很多时候,让团队可持续性的维护代码便是最佳; 重构后会生成很多类,一个简单业务搞这么复杂?所以你需要权衡
平时开发中if-else用的多吗? 其实这是个再正常不过的coding习惯,当我们代码量小的时候用来做条件判断是再简单不过的了。 但对于优秀程序员来说,这并不是好代码, 为啥?...在进阶高级开发的路上,应该逐步培养起这种前瞻意识, 即使在代码还在起步阶段,应该要能够看到将来代码发展的趋势, 比如上面的代码,当情况越来越多的时候,if-else可能会发展出许多个分支: ?...如何重构掉这段代码 对于这种代码我们重构的目标可以有两个深度,看自己强迫症的严重程度决定 · 继续用 if-else,只达到剥离执行代码块 · 用工厂模式去耦合 对于这两种其实不是非此即彼的关系,而是优化深度不同...在经过这一轮重构之后,我们之前在一个类里面写的那堆代码已经抽离到多个不同的类里了, 现在在原来的类里的代码变成怎样了呢, ?...重构之后各个Executor和主类中的耦合已经降到很低了, 而且代码整洁度提高了很多,之前那个类的一段50+行的代码变成了2行,这就是重构的意义。
switch if - else只适合在3层之内使用 当条件判断较多时,可以首先考虑使用switch interface 当判断条件还可能动态增加时,可以考虑将switch进一步优化,引入接口interface...,将代码与数据分离: 创建一个map: key: switch的case值 value: 对应的实体类 抽象出通用方法,变成一个接口,统一入参和返回值 主实现类controller类就是将type值传进去...,获取到对应的实现类,然后调用抽象出来的方法,这样无论增加多少个case, 都不会改变主逻辑代码 每个类单独实现接口,互不影响 db setting 用db setting表的方式加载type对应的实体类...解决方案: 将case的实现用动态语言完成,并且将代码写在db里 db里保存的是代码 启动的时候初始化所有的实现类,以节省时间 主实现类controller类里主逻辑代码不变,但额外提供一个初始化map...,然后根据不同的程度来给出不同的方案 不要过度设计: 有方案不代表当前必须做,能把设计提前比需求快一步,就很好了 学会给自己的代码分级,是让自己进步的最好的办法.一个人的成长分为几个阶段: 面向功能编程
作者:曾探 来源:《JavaScript设计模式与开发实践》 模式和重构之间有着一种与生俱来的关系。从某种角度来看,设计模式的目的就是为许多重构行为提供目标。...1.提炼函数 在JavaScript开发中,我们大部分时间都在与函数打交道,所以我们希望这些函数有着良好的命名,函数体内包含的逻辑清晰明了。...如果一个函数过长,不得不加上若干注释才能让这个函数显得易读一些,那这些函数就很有必要进行重构。 如果在函数中有一段代码可以被独立出来,那我们最好把这些代码放进另外一个独立的函数中。...} return ret; }; 嵌套的条件分支语句绝对是代码维护者的噩梦,对于阅读代码的人来说,嵌套的if、else语句相比平铺的if、else,在阅读和理解上更加困难,有时候一个外层...即使我们假设三目运算符的效率真的比if、else高,这点差距也是完全可以忽略不计的。在实际的开发中,即使把一段代码循环一百万次,使用三目运算符和使用if、else的时间开销处在同一个级别里。
通过用 if/return 替换 if/else来减少过多的缩进 尽量减少方法(或函数)中“干或”代码的缩进。 错误处理是“噪音”。...(result变量)可能会被错误地修改 (间接)鼓励了一个或多个if/else 示例: if/else 重构 我们来看一下下面这段典型的node回调代码: function(err, results)...当 if后面的"happy path"(代码)很长的时候,读者就不知道到底处理的是什么错误了。 那我们尝试重构一下:将函数要做的“正经”事情放在后面。...像上面这种情况就可以重构为如下代码:去掉 else, 减少一层缩进。在 if里直接 return。...综上,最终代码: 方法(或函数)处于最低的缩进等级 没有不必要的缩进 代码更短小精炼 以上 ---- 往期精选文章 使用虚拟dom和JavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用
为什么我们写的代码都是if-else?...对于这两种情况重构的方法也不一样。 代码if-else代码太多有什么缺点? 缺点相当明显了: 最大的问题是代码逻辑复杂,维护性差,极容易引发bug。...函数的好处是屏蔽内部实现,缩短if-else分支的代码。代码结构和逻辑上清晰,能一下看出来每一个条件内做的功能。...总结 if-else代码是每一个程序员最容易写出的代码,同时也是最容易被写烂的代码,稍不注意,就产生一堆难以维护和逻辑混乱的代码。...现在回头看看自己的代码,犯了哪些典型错误,赶紧运用这些重构方法重构代码吧……
为什么我们写的代码都是 if-else?...对于这两种情况重构的方法也不一样。 代码 if-else 代码太多有什么缺点? 缺点相当明显了:最大的问题是代码逻辑复杂,维护性差,极容易引发 bug。...:把 if-else 内的代码都封装成一个公共函数。...函数的好处是屏蔽内部实现,缩短 if-else 分支的代码。代码结构和逻辑上清晰,能一下看出来每一个条件内做的功能。...总结 if-else 代码是每一个程序员最容易写出的代码,同时也是最容易被写烂的代码,稍不注意,就产生一堆难以维护和逻辑混乱的代码。
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...关于怎么用,完全可以生搬硬套我总结的使用设计模式的四个步骤: 业务梳理 业务流程图 代码建模 代码demo 业务梳理 按照如上某东的订单结算页面的示例,我们得到了如下的订单结算页面模块组成图: ?...----------------------- //我的代码没有`else`系列 //组合模式 //@auhtor TIGERB //-------...我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2....---- 我的代码没有else系列 更多文章 代码模板 | 我的代码没有else 链式调用 | 我的代码没有else 点击https://github.com/TIGERB/easy-tips/tree
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...关于怎么用,完全可以生搬硬套我总结的使用设计模式的四个步骤: 业务梳理 业务流程图 代码建模 代码demo 业务梳理 我通过历史上接触过的各种抽奖场景(红包雨、糖果雨、打地鼠、大转盘(九宫格)、考眼力、...------------ //我的代码没有`else`系列 //模板模式 //@auhtor TIGERB //------------------...//------------------------------------------------------------ //我的代码没有`else`系列 //模板模式 //@auhtor TIGERB...我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2.
Add Parameter Change Bidirectional Association to Undirectional Change Reference...
原文出自:https://juejin.cn/post/6903054491273625614 什么是重构 所谓重构是这样一个过程:在不改变代码外在行为的前提下,对源代码做出修改,以改进程序的内部结构...本质上来说重构就是在代码写好之后改进它的设计。 重构的目的是什么 首先,重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。项目在演进,代码不停地在堆砌。...这段代码可能是别人写的,也可能时自己写的,但无论如何,当你觉得这段代码逻辑糟糕,需要花费几分钟才能明白其中的含义时,你就要想着如何去重构才可以使代码变的更加简洁直观 有计划的对代码重构 「找寻重构和开发进度中适合自己的平衡点...何时不应该重构 「有所为,有所不为。」 并非所有的糟糕代码都需要重构,如果你不需要使用到这段代码,那么就不必花心思去重构它。只有你需要理解其中的工作原理时,对其重构才有价值。...学会只编写够用的注释,过犹不及,应当重视质量而不是数量 多层的if语句嵌套 ? if-else在程序设计中是不可避免的,作为程序员能做的就是减少嵌套,提升代码的可阅读性和质量 很酷却不宜理解代码 ?
而重构代码就是依赖于设计模式而实现的一个必要手段,可以说设计模式就是重构代码的目标,但他的手段却不仅仅只有设计模式这些大而全的,同样存在小而精,我们随处可以使用的。...封装功能块代码 我们通常在写代码的时候,一开始,并不需要考虑太多。在后期可以进行修改和提炼。...我们可以使用命令模式进行重构。 这就涉及到另外一个tip. 将分支转化为函数 上面代码里面的分支完全可以使用函数来进行代替。...这就是通过命令模式,来重构代码,完成性能和阅读的优化。 但有时候,使用分支,会比这样更简洁,那当然可以使用分支啦。 而使用分支还要主意一个tip就是....大部分重构的小技巧差不多介绍完了(智商有限),如果,大家有什么更好的建议欢迎留言反馈. 原文出处:IVWEB社区 未经同意,禁止转载
,重构能有今天的风光影响力完全少不了单元测试的功劳;最近一段时间写单元测试用例的时间远超过我写逻辑代码的时间和多的多的代码量,这是为什么?...,那么一旦被测试代码发生一点点的变化都会很大程度上影响测试代码,毕竟测试代码都是步步依赖的; 那么我们应该最大程度的限制由于被测试代码的变动而引起的测试代码的变动,这个时候我们应该将重构应用到测试代码中...; 2.1】单元测试的继承体系(利用超类来减少Mock对象的使用) 将多个相关的测试用例代码通过超类的方式关联起来统一管理将大大减少重复代码的构建;就跟我们重构普通代码一样,将多个类之间共享的逻辑代码或者对象提取出来放到基类中...,因为我们的项目中是需要迭代重构的,我们需要重构来为我们的项目保证最高的质量; 所以单元测试修改的次数和重构的次数应该是成1:0的这样的比例,修改的范围那就不是1:10了,有时候甚至是几何的倍数; OrderService...,将规则对象化后就能随便的控制他们,当然这里是提取出方法,如果是大型企业级项目对这些易变化的点是需要抽取出来的; 总之遇到这样的情况就使用简单的提取方法的方式将复杂的逻辑提取出来,这也是《重构》中的重构策略的首要的模式
大型重构 1. Tease apart Inheritance 梳理并分解继承体系 某个继承体系同时承担两项责任 ,建立两个继承体系,并通过委托关系让其中一个可以调用另一个 . 2....Convert Procedural design to Objects 将过程化设计转化为对象设计 你手上有一些传统过程佛冈可选择代码 , 将数据记录变成对象,将大块的行为分成小块,并将行为移入相关对象之中...Separate Domain from from Presention 将领域和表述/显示分离 某些GUI类之中饮食了领域逻辑 , 将领域逻辑分离出来,为它们建立独立的领域类 4....Extract Hierarchy 提炼继承体系 你有某个类做了太多工作,其中一部分工作是以大量条件表达式完成的 , 建立继承体系,以一个子类表示一种特殊情况
, 逻辑关注点是指表达同一个业务的代码内聚到一起,这也是单一职责的指导思想,我们内聚的不应该技术类型,而是业务逻辑,因为触发代码变更的往往是业务需求,因此把相同变更理由的代码放在一起,这才不会导致散弹式修改...问题三:新的语法让Vue失去简单性,导致"意大利面条式代码"的出现,降低项目维护性。 尤雨溪: 正好相反,新的API就是为了提高项目长期维护性的。...如果我们查看任何javascript项目,都会从入口文件开始阅读,该文件的本质是你的应用启动时被隐式调用的"main"函数。...如果只有一个函数入口,会导致意大利面条代码,那所有的js项目都是意大利面条代码。显然不是的,因为开发人员通过代码模块化或者较小的函数来组织代码。 另外,我同意新的API理论上会降低代码质量的最低门槛。...但是我们可以使用以往防止代码变成意大利面条的手段缓解这种情况。另一方面,新的API可以提升代码质量的最高上限,相比option api,你可以重构为质量更高的代码。
SFC 就是按功能组织代码的方法,但讽刺的是当首次引入 SFC 时,许多人也是拒绝的,认为它违反了关注点分离。问题三:新的语法让 Vue 失去简单性,导致"意大利面条式代码"的出现,降低项目维护性。...尤雨溪: 正好相反,新的 API 就是为了提高项目长期维护性的。如果我们查看任何 javascript 项目,都会从入口文件开始阅读,该文件的本质是你的应用启动时被隐式调用的"main"函数。...如果只有一个函数入口,会导致意大利面条代码,那所有的 js 项目都是意大利面条代码。显然不是的,因为开发人员通过代码模块化或者较小的函数来组织代码。...另外,我同意新的 API 理论上会降低代码质量的最低门槛。但是我们可以使用以往防止代码变成意大利面条的手段缓解这种情况。...另一方面,新的 API 可以提升代码质量的最高上限,相比 option api,你可以重构为质量更高的代码。而且,基于 Option api 你还得解决类似 mixins 的问题。
领取专属 10元无门槛券
手把手带您无忧上云