精华内容
下载资源
问答
  • 代码重构

    2021-05-17 10:40:00
    关于重构 1.原因 编码之前缺乏有效的设计 成本上的考虑,在原功能堆砌式编程 缺乏有效代码质量监督机制 2.定义 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,...

    关于重构
    1.原因
    编码之前缺乏有效的设计
    成本上的考虑,在原功能堆砌式编程
    缺乏有效代码质量监督机制
    2.定义
    重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
    重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
    3.大型重构和小型重构
    4。代码的坏味道
    1)代码重复
    实现逻辑相同、执行流程相同
    2)方法过长
    方法中的语句不在同一个抽象层级
    逻辑难以理解,需要大量的注释
    面向过程编程而非面向对象
    3)过大的类
    类做了太多的事情
    包含过多的实例变量和方法
    类的命名不足以描述所做的事情
    4)逻辑分散
    发散式变化:某个类经常因为不同的原因在不同的方向上发生变化
    散弹式修改:发生某种变化时,需要在多个类中做修改
    5)严重的情结依恋
    某个类的方法过多的使用其他类的成员
    6)数据泥团/基本类型偏执
    两个类、方法签名中包含相同的字段或参数
    应该使用类但使用基本类型,比如表示数值与币种的Money类、起始值与结束值的Range类
    7)不合理的继承体系
    继承打破了封装性,子类依赖其父类中特定功能的实现细节
    子类必须跟着其父类的更新而演变,除非父类是专门为了扩展而设计,并且有很好的文档说明
    8)过多的条件判断
    9)过长的参数列
    10)临时变量过多
    11)令人迷惑的暂时字段
    某个实例变量仅为某种特定情况而设置
    将实例变量与相应的方法提取到新的类中
    12)纯数据类
    仅包含字段和访问(读写)这些字段的方法
    此类被称为数据容器,应保持最小可变性
    13)不恰当的命名
    命名无法准确描述做的事情
    命名不符合约定俗称的惯例
    14)过多的注释
    5.问题
    难以复用
    系统关联性过多,导致很难分离可重用部分
    难于变化
    一处变化导致其他很多部分的修改,不利于系统稳定
    难于理解
    命名杂乱,结构混乱,难于阅读和理解
    难以测试
    分支、依赖较多,难以覆盖全面
    6.评判标准
    可维护性、可读性、可扩展性
    7.重构遵循的原则
    单一职责原则
    一个类只负责完成一个职责或者功能,不要存在多于一种导致类变更的原因。

    开放-关闭原则
    添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。

    里氏替换原则
    子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。

    接口隔离原则
    调用方不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一。

    依赖反转原则
    高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

    迪米特法则
    一个对象应该对其他对象保持最少的了解

    合成复用原则
    尽量使用合成/聚合的方式,而不是使用继承。
    8.重构技巧
    1)提炼方法
    多个方法代码重复、方法中代码过长或者方法中的语句不在一个抽象层级。
    方法是代码复用的最小粒度,方法过长不利于复用,可读性低,提炼方法往往是重构工作的第一步。

    2)意图导向编程:把处理某件事的流程和具体做事的实现方式分开。
    把一个问题分解为一系列功能性步骤,并假定这些功能步骤已经实现
    我们只需把把各个函数组织在一起即可解决这一问题
    在组织好整个功能后,我们在分别实现各个方法函数

    3)以函数对象取代函数
    将函数放进一个单独对象中,如此一来局部变量就变成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。

    4)引入参数对象
    方法参数比较多时,将参数封装为参数对象

    5)移除对参数的赋值
    6)将查询与修改分离
    任何有返回值的方法,都不应该有副作用

    不要在convert中调用写操作,避免副作用

    常见的例外:将查询结果缓存到本地

    7)移除不必要临时变量
    临时变量仅使用一次或者取值逻辑成本很低的情况下

    8)引入解释性变量
    将复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途

    9)使用卫语句替代嵌套条件判断
    把复杂的条件表达式拆分成多个条件表达式,减少嵌套。嵌套了好几层的if - then-else语句,转换为多个if语句

    10)使用多态替代条件判断断
    当存在这样一类条件表达式,它根据对象类型的不同选择不同的行为。可以将这种表达式的每个分支放进一个子类内的复写函数中,然后将原始函数声明为抽象函数。

    11)使用异常替代返回错误码

    12)引入断言

    13)引入Null对象或特殊对象

    14)提炼类

    15)组合优先于继承

    16)优先考虑泛型

    17)静态成员类优于非静态成员类

    18)优先使用模板/工具类

    9质量保证
    测试驱动开发
    1)定义
    测试驱动开发(TDD)要求以测试作为开发过程的中心,要求在编写任何代码之前,首先编写用于产码行为的测试,而编写的代码又要以使测试通过为目标。TDD要求测试可以完全自动化地运行,并在对代码重构前后必须运行测试。
    2)原则
    仅在测试失败时才编写代码并且只编写刚好使测试通过的代码
    编写下一个测试之前消除现有的重复设计,优化设计结构
    关注点分离是这两条规则隐含的另一个非常重要的原则。其表达的含义指在编码阶段先达到代码“可用”的目标,在重构阶段再追求“整洁”目标,每次只关注一件事

    展开全文
  • 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。 在软件工程学里。先从接触过的几个老项目经历来谈谈,对于老项目来说,大家在初步...

    指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。 在软件工程学里。

    先从接触过的几个老项目经历来谈谈,对于老项目来说,大家在初步接触的过程中,大多总是抱着抵触的情绪,甚至有些是蔑视。总喜欢对以前的代码挑出一大堆的问题,接着就开始抱怨代码、抱怨以前的开发人员,经过一段时间郁闷的抱怨阶段后。

    java中什么是代码重构,什么时候需要代码重构

    f2bf1db234cbbd8ade582764545fdd99.png

    代码重构(英语:Code refactoring)重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

    到底是代码重构还是代码修整

    java重构代码,怎么进行重构,重构有什么好处

    重构(),通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。也许有人会问,为什么不在项目开始时多花些时间把设计做好,而要以后花时间来重构呢?要知道一个完美得可以预见未来任何变化的

    java开发中 代码重构重要么是每个项目都必须代码重构么?有开发经验的说说现实情况

    项目急的话,做完就算了,正如很多外包的代码都惨不忍睹。 重构啥的,是为了后期的维护,看自己的需要,做出取舍。

    Java代码重构的几种模式

    Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式重命名方法重构模式建议执行如下的步骤来完成:1.建立一个具有新名称的方法2.将旧方法的方法体复制进新方法3.讲旧方法的方法体修改为调

    Java中 为何说抽象类是代码重构的结果?

    java 代码重构神马的啊。PS:我是小白,弱弱问一下,那个代码重构什么的,神马意思啊?举个例子啊前提是不能改变逻辑和功能,在面向对象的思想里,针对代码结构和质量进行修改。

    展开全文
  • Python代码重构

    2021-01-29 08:04:38
    代码重构是一件很是辛苦却很是有意义的事情,代码重构的缘由在于:django一、代码过于冗余、沉余架构二、代码过于耦合函数三、代码过于复杂学习四、接口调用超出三层优化此次重构主要在于架构问题,本身没有画出实现...

    代码重构是一件很是辛苦却很是有意义的事情,代码重构的缘由在于:django

    一、代码过于冗余、沉余架构

    二、代码过于耦合函数

    三、代码过于复杂学习

    四、接口调用超出三层优化

    此次重构主要在于架构问题,本身没有画出实现整个项目的功能,逻辑实现与接口定义,就猴急猴急的写起的代码,以后发现写的代码很low,连本身都看不下去,最终走向重构之路!设计

    此次重构也让我知道有一个好的架构,理解功能,想清楚功能实现的具体逻辑,接口定义的规范,还有不少不少.......   so import!!!代码规范

    本次重构项目是B/S架构,服务端为django+Python,此次重构过程当中,先从功能的逻辑为出发点,编写具体的接口以及实现的逻辑,遇到问题有:blog

    一、接口名称定义接口

    二、逻辑如何实现,达到最优化图片

    三、接口与接口之间的调用

    重构后,代码比以前好多,没有那么凌乱,仍是不够好,我想继续努力,那么就要清楚下一步须要什么?

    一、代码设计

    二、代码规范

    三、代码命名

    代码原则:

    一、函数名称不能太长,(while/for/if)嵌套层次不要太深

    二、函数名称声明尽可能合理、简单,函数的参数不宜过多;例如函数名、函数的参数

    三、一个函数只干一件事

    11月份全力解决两件事:

    一、学习且可以设计架构

    二、代码设计规范

    三、代码命名与参数

    学习方式:

    一、在GitHub上查找相关Python工程代码,仔细阅读工程代码结构

    二、学习他们命名名称,本身学着练习

    三、练习Python 经常使用模块

    Python开发知识架构图(图片来源互联网)

    51a0f04b06acd594861c240f91b86fb4.png

    展开全文
  • 对象:对系统、模块、代码结构、类与类之间的关系等的重构 方法:有分层垂直拆分、模块化水平拆分、解耦、抽象UI组件、抽象业务组件、抽象区块 方法论:编程范式、设计原则、设计模式 影响:代码改动多,影响面广,...

    WHAT:什么是重构?

    Martin Fowler:重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。

    在这里插入图片描述

    • 大型重构
      • 对象:对系统、模块、代码结构、类与类之间的关系等的重构
      • 方法:有分层垂直拆分、模块化水平拆分、解耦、抽象UI组件、抽象业务组件、抽象区块
      • 方法论:编程范式、设计原则、设计模式
      • 影响:代码改动多,影响面广,难度较大,耗时较长,引入BUG风险高
    • 小型重构
      • 对象:对类、函数、变量等代码级别的重构
      • 方法:规范命名(见名知意)、规范注释、函数拆分、提取重复代码、eslint等
      • 方法论:统一代码风格、制定规范、语义化编程、eslint
      • 影响:影响面小,难度小,次数频繁,引入BUG风险低

    WHY:为什么要重构?

    • 软件最初设计的时候没有考虑到全部的功能和细节
    • 软件需求变更和持续迭代导致原先的设计已不适用
    • 消除破窗效应,当代码里面有了坏味道而不及时改善,容易破罐子破摔加速恶化

    HOW:如何重构代码?

    • 灵活运用编程范式思想
      • 面向对象
      • 面向过程
      • 函数式编程
    • 以设计原则为核心
      • SOLID
      • KISS
      • DRY
      • YAGNI
      • LOD
      • CRP
    • 以eslint为基础手段
      • airbnb
      • standard
      • recommanded
      • prettier
      • 自定义
    • 渐进式持续重构代码为方法论
    • 优点:持续集成、进度可控、过程可逆、不影响正常业务开发进度
    • 按金字塔原则对项目代码进行拆分
      • 业务模块水平拆分
      • 代码分层垂直拆分
    • 评估出每一个重构单元的耗时
      • 合理评估工作量
      • 权衡重构的性价比
      • 增加重构的可控性
    • 正在做或规划中的业务单元顺手完成重构,其他部分安排空闲时间依次重构
    • 注意
      • 从0->1一次性完成重构的理想场景只存在于理想中。如果真实存在,只能说明项目过小或者已经趋于稳定迭代很少,这种情况要考虑是否真的有重构的必要!!!
      • 不要有了锤子(重构方法论),就满世界去找钉子
      • 重构不是软件开发的必要流程,而是现有代码的组织缺陷或不合理的补救方式。
      • 养成好的代码风格code review的习惯避免代码的坏味道才是根本

    WHEN:什么时候重构?

    • 不要等到积重难返有了瓶颈之后再进行重构,大规模高层次的重构耗时耗力难度剧大
    • 应该建立起渐进式持续重构的意识,发现当前业务代码写的有问题就应该及时进行小规模的重构,而不是欠一屁股技术债

    BUG:重构会不会引入新的BUG?

    会,所以怎么办呢?

    • 通过完整的单元测试保证重构前后的外部可见性一致
    • 有条件的话找专业的测试进行端到端测试灰度测试

    RISK:重构上线带来BUG的风险怎么解决?

    如果不通知业务方直接将重构的代码上线,一旦出现问题,你肯定全责并且重构没有功劳也没有苦劳了

    • 有条件的话找专业的测试进行端到端测试和灰度测试
    • 必须通知业务方并说服业务方同意,让业务方做好准备上线后检查一下。如果真的引入了bug也不太会追责,因为在预期内并且我们的目标也是为了项目的长远发展呀

    FEASIBILITY:如何让业务方意识到现阶段重构是必要的并同意?

    • 让业务方、产品、测试看到开发中的痛点和技术上的瓶颈
    • 让所有人意识到缝缝补补破窗效应导致问题加剧,已经积重难返了
    • 强调重构带来的技术收益业务收益
    • 提供切实可行并可控的重构计划方案

    PERFORMANCE:重构价值不被认可怎么办?

    • 明明是你代码写的烂才导致的重构,浪费时间,还有脸要绩效?想屁吃呢
      • 承认自己会写bug,表明没有不写bug的程序员(勇于担当并弱化责任,表明owner身份和地盘
      • 指出导致重构的其他原因:需求频繁变更,紧急需求倒排工时,没有将业务长期规划方向信息同步给开发,多人协作团队没有统一风格,团队没有code review,没有eslint规范等等(表明主要责任不在我,但是我意识到了问题主动解决了)
      • 强调重构带来的优点:BUG数量减少,维护成本下降,BUG排查变快,开发速度增高等(业务价值才是绩效的根本

    (ps:本博客用于学习总结,欢迎友好交流)

    展开全文
  • 常见代码重构技巧(非常实用)

    千次阅读 2021-05-15 01:02:19
    点击关注公众号,Java干货及时送达作者:VectorJinjuejin.cn/post/6954378167947624484关于重构为什么要重构1_代码重构漫画.jpeg项目在不断演...
  • >>号外:关注“Java精选”公众号,回复“2021面试题”,领取免费资料!“Java精选面试题”小程序,3000+ 道面试题在线刷,最新、最全 Java 面试题!关于重构为什...
  • 文章目录系列文章目录前言一、重构的定义二、重构的目的(1)增加代码的兼容性、拓展性(2)增加代码的逻辑性,减少复用及多余的流程,逻辑清晰明了(3)提高代码开发的效率(4)提高代码的可读性(5)【个人的】...
  • 到底什么是代码重构

    热门讨论 2021-01-26 16:42:30
    代码重构 代码重构(Code refactoring)重构就是在不改变软件系统外部行为的前提下,对它的内部结构进行改善。 代码重构需要借助重构工具来完成,重构工具能够修改代码同时修改所有引用改代码的地方。 特点:使代码...
  • 程序员必学的代码重构(理论篇)

    热门讨论 2021-03-20 21:02:35
    本文是笔者毕业后的第一篇blog,将从三个方面讨论代码重构。即:1.代码重构是什么;2.常用的重构手法;3.代码中的“坏味道”。本篇blog是《重构,改善代码既有代码的设计》一文的读书笔记,读书笔记与书一起食用效果...
  • 根据重构的规模可以大致分为大型重构和小型重构: 大型重构 :对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的...
  • 代码重构是每一位开发者最熟悉不过的字眼,其出现通常伴随着开发过程。在程序开发、迭代与演进的漫漫长路中,某次不经意的修改就可能破坏程序原有的设计与结构,造成代码结构的流失,而这种流失是具有累积性的,若未...
  • 优化代码结构(主要是设计模式上),优化成好用的系统成为了一个新的小目标。 面向对象设计原则 单一职责原则Srp 开放-关闭原则Ocp,解决的是程序的扩展性 里式替换原则Lsp,解决的是程序的继承性 接口隔离原则Isp ...
  • 关于重构为什么要重构项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发...
  • 2,8阅读第一章 第一个案例在此案例中使用了,方法的提取(extract method),...重构使得代码功能更加好的被复用,偏于维护和修改。注意:switch语句的属性尽量不要是另一个对象的数据,最好在自己的数据基础上进行第二...
  • idea代码重构快捷键

    2020-12-22 22:36:33
    idea常用快捷键和重构快捷键如下 常用快捷键 2.生成setter getter 方法等 alt + insert 3.复制一行:ctrl + d 4.删除一行 :ctrl + y 5.导包,生成变量: alt + insert 6.try catch 等:ctrl+alt+t 7.代码跟踪回退:...
  • 玩转 PhpStorm 系列(六):通过代码重构提高代码复用性由 学院君 创建于7个月前, 最后更新于 4个月前版本号 #31723 views1 likes0 collects在 PhpStorm 中,我们可以通过自带的重构功能(Refactor)非常方便地对代码...
  • Python代码重构(一)

    2021-01-29 18:32:49
    前言 ...以下是有关Python重构的系列文章的第一部分,其它部分会继续推出。本系列的重点是为什么这样做是好的做法,而不仅仅是教你如何做。 1. 合并嵌套的if条件 太多的嵌套使代码难以理解,尤其在p
  • 代码重构终极指南

    2021-03-24 09:58:58
    代码重构示例 重构代码的工具 重构与工程经理的难题 高级管理层对重构的支持 团队支持与重构:一个Sprint还是马拉松? 文档与重构 什么是重构? Martin Fowler曾出版了两本有关重构的...
  • Java中多层嵌套if-else代码重构 1.背景 相信大伙儿都见过这样的代码: if (true) { // do something if (true) { // do something if (true) { // do something if (true) { // do something
  • 5、代码重构示例 代码重构的示例非常多,为了简洁起见,我们介绍以下几种: 红色,绿色和重构 重构与单元测试息息相关。最常见的形式之一就是敏捷方法固有的测试驱动开发(Test-Driven Development,即TDD)。你...
  • 以下文章来源方志朋的博客,回复”666“获面试宝典来源 |juejin.cn/post/6954378167947624484关于重构为什么要重构1_代码重构漫画.jpeg项目在不断演进...
  • IDEA 代码重构

    2021-07-10 23:02:42
    三种简化代码(提高可读性)的方式 extract change rename 一、extract(提取) 1、method(ctrl+alt+m) 抽取方法 2、constants(ctrl+alt+c) 抽取常量 3、fields(ctrl+alt+f) 抽取字段 4、parameters(ctrl+alt+p) ...
  • 重构含有过多参数的方法,为什么要重构,因为当一个方法有过多的参数的时候 即难以阅读又难以维护。也就是说有的时候是远程调用这些方法 所以用到了API,如果要仅仅为了修改一个参数 那么就要修改接口。重构方法:将...
  • 程序员必懂的代码重构(理论篇)一文介绍了代码重构是什么、常用的重构手法和代码中的“坏味道”。But talk is cheap. Show me the code,本文将从实战的角度来谈谈代码重构,共分为:题目、初步解法、重构实战和...
  • 代码重构技巧

    2021-01-23 14:04:42
    代码重构技巧 参考网址 https://mp.weixin.qq.com/s/1-TN5YMqImQojXLfcHuY1A 作者语录 本次我们抛开 JAVA 虚拟机源码这些相对底层的东西,LZ 来与各位探讨一下几个代码重构的小技巧,这些内容部分来自于书籍当中...
  • 点击⬆️方“逆锋起笔”,公众号回复编程资源 领取大佬们推荐的学习资料 【编者按】重构是一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 316,014
精华内容 126,405
关键字:

代码重构

友情链接: vcyuandaima.rar