重构原则

重构:对软件内部结构的一种调整,目的是在不改变软件客观察行为的前提下,提高其可理解性,降低修改成本。

何为重构

重构改进软件的设计。如果没有重构,程序的设计会逐渐腐败变质。而改进设计的一个重要的方向是消除重复代码。

重构使软件更易被理解

重构能帮助我们找到软件的bug

重构提高编程速度

良好的设计师快速开发的根本。重构可以帮助你更快地开发软件

何时重构

三次法则,事不过三,三则重构

添加新功能的时候重构

修补错误的时候重构

复审代码的时候重构

间阶层与重构

计算机科学是这样的一门科学:它相信所有的问题都可以通过增加一个间阶层来解决

间阶层的价值:

允许逻辑共享

分开解释意图和实现:你可以选择每个类和函数的名字,这给了你一个解释自己意图的机会。

隔离变化:通过使用子类来隔离同一对象修改对另一处引用带来变化的风险

封装条件逻辑:使用多态机制将条件逻辑转化为消息机制,这往往能降低代码的重复,增加清晰度并提高弹性

重构的难题

数据库

在非对象数据库中解决这个问题的办法就是:在对象模型和数据库模型之间插入一个分割层,这就可以隔离两个模型各自的变化。

你无须一开始就插入分割层,可以在发现对象模型变得不稳定的时候再做。

修改接口

关于对象:它允许你分开修改软件模块的实现和接口。你可以安全地修改对象内部实现而不影响其他人,但接口一旦修改,任何事情都可能发生。

当接口被那些“找不到,或者即使找到也不能修改”的代码引用的时候接口就被称为已发布接口

如果重构手法改变了已经发布的接口,你必须同时维护新旧两个接口,直到所有永不都有时间对这个变化做出反应。这时我们可以让老接口调用新接口。

千万不要复制函数的实现,那会让你陷入重复代码的泥沼中难以自拔。同时可以使用java提供的deprecation

不要过早发布接口。请修改你的代码所有权政策,使重构更顺畅。

Java中的异常,通常我们可以在模块中定义异常基类,所有的public函数只在自己的throws子句中申明这个异常。这样我们后续可以随意定义异常子类。

难以通过重构手法完成的设计改动

这种场景出现的比较少

何时不该重构

1、 现有代码根本不能正常运行。重构之前,代码必须能够在大部分情况下正常工作。其中一个折中的办法是讲比较大的软件封装为良好的小型组件。

2、 如果项目已经接近最后期限,你也应该避免重构。

重构与设计

有了设计,我可以思考的更快,但是其中充满了小漏洞

软件是纯思想产品。这和其他设计的具体实施有很大区别。

重构无法替代预先设计。但是有了重构你只要得到一个足够合理的解决方案就够了。重构带来更简单的设计,同时又不失灵活性,这也降低了设计过程的难度,减轻了设计压力。

哪怕你完全了解系统,也需要实际度量其性能,不要臆测。臆测会让你学到一些东西,但十有八九是错的。

重构与性能

虽然重构有可能导致软件运行更慢,但它也使得软件的性能优化更加容易。除了对性能有严格要求的实时系统,其他任何情况下“编写快速软件”的秘密就是:首先写出可以调试的软件,然后调整它以求获得足够的速度。

对于实时性要求比较高的系统,通常我们需要分解设计,给每个组件预先分配一定的资源(时间和执行轨迹)并严格执行。

另外如果我们持续关注软件性能,在做任何事情的时候都设法保证系统的高性能,这样有可能导致系统难以维护。

比较合理的做法是,开发阶段无需过于关注程序性能,在性能优化阶段(程序开发后期)按照某个特定的程序来调整程序性能。

大多数程序而言,大半的时间都耗费在一小部分代码上。

一个构造良好的程序可以从两方面帮助性能优化:首先让你有充裕的时间进行性能调整。因为构造良好的程序有助于开发进度的推进。其次面对构造良好的程序你在进行性能分析时有更细的粒度性能测量工具定位更精确。

java代码重构原则_重构原则相关推荐

  1. 代码设计的基础原则_设计原则:良好设计的基础

    代码设计的基础原则 As designers, it's our goal to pass information in the most pleasing way possible. Startin ...

  2. java依赖倒转原则_设计原则之--依赖倒转原则

    [各位博友晚上好,又到了晚上的这个时间,感谢大家一直对Darren博客的支持,希望这篇文章对你有所帮助: 这几天一直在看设计模式:简单工厂模式,策略模式,单一职责原则,开放 [依赖倒转原则又称依赖倒置 ...

  3. java 代码 内存泄露_如何用Java编写一段代码引发内存泄露

    Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中) ...

  4. java代码解锁华为_如何编写可怕的Java代码?

    我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...

  5. java代码初体验_第一次Java 8体验

    java代码初体验 像世界其他地方一样,我深深地爱上了Slack. 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法. 您认为这些天哪个更常见,杂乱无章的机智 ...

  6. jsp文件里java代码的作用_如何使用JSP 2避免JSP文件中的Java代码?

    小编典典 自从2001年标签库(例如JSTL)和EL(表达语言,那些东西)的诞生以来,在JSP中确实不建议使用scriptlet(那些东西).${} scriptlet的主要缺点是: 可重用性:您无法 ...

  7. java 代码解析工具_改善 Java 代码质量的工具与方法

    原标题:改善 Java 代码质量的工具与方法 我们可能见过上面的有关代码质量的图片,究竟如何衡量一段代码好坏? 代码质量是什么?为什么它很重要? 作家通过他的著作来讲述了一个清晰的.令人信服的故事.他 ...

  8. 中秋节图案 用java代码打出来_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法.doc...

    基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 这篇文章主要介绍了基于Java代码实现判断春节.端午节.中秋节等法定节假 ...

  9. 举例说明层次分析的三大原则_《原则》一书精华解析:作者桥水基金创始人瑞.达利欧...

    <原则> 作者:瑞.达利欧 桥水基金创始人 人生原则 人一生最重要的事情,就是在纷繁复杂的世界中总结出自己的原则,来应对时刻变化的现实. 独立思考,是构建自我原则最重要的起点. 如何总结出 ...

  10. 怎么保存java代码怎么写_怎么样能写好Java代码,大神们给点意见?

    怎么样能写好?避免不了多学多练.java代码规范详细版 - 百度文库​wenku.baidu.com 相信很多初学者都跟我抱有一样的想法"代码写出来是给电脑运行的,能运行起来,实现效果就好了 ...

最新文章

  1. oracle log block size,案例:Oracle无法启动报错ORA-00218: block size 0 重建控制文件
  2. Java之线程同步练习
  3. 嘿嘿,又中毒了spoolsv.exe
  4. oracle 复制组删除,利用copy在ASM磁盘组之间迁移
  5. android mvp 作用,Android MVP与MVC的区别和理解
  6. 系统架构设计师 - 23种设计模式(GOF)
  7. 去掉 edittext 长按全选_开封消毒湿巾全选
  8. Find the longest route with the smallest starting point
  9. 一个大神的文章如何在没有OPENCV的电脑上跑你的程序调用的opencv程序
  10. php 深入,深入PHP解耦的三重境界(浅谈服务容器)
  11. 建模实训报告总结_建筑实训报告总结
  12. 2018大学计算机选择题题库,2018年9月计算机二级选择题题库(31-40)
  13. 必看!超详细的电子元器件选型经验分享
  14. android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
  15. python变成灰色_Python怎么把彩色图像转换成灰色图像?
  16. Warning: Class ‘com.bupt.dts.DTSFortran‘ not found in module ‘AntlrTest‘
  17. android edittext numberdecimal,android – 如何在“手机”软键盘上使用InputType = numberDecimal?...
  18. 数据可视化Matplotlib使用5-改变坐标轴的默认显示方式
  19. 青春无悔―追忆10年前的那场校园民谣
  20. 6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么

热门文章

  1. Linux让终端只接受键盘输入
  2. A2Billing源码分析笔记(一)
  3. CentOS 7.2 Mitaka云平台计算节点部署脚本(VLAN供应商网络)
  4. 热敏电阻(NTC)温度计算,C语言
  5. 第八章 Android 原生程序开发与逆向分析(三)(原生程序文件格式)
  6. TOJ 3287 Sudoku 9*9数独 dfs
  7. Gartner发布CNAPP市场指南 腾讯云为国内唯一入选云厂商
  8. 字体大宝库:20款好看的免费英文字体下载
  9. 电赛练习1《基础版》— 利用Multisim设计并制作一个简易的方波-三角波-正弦波信号发生器,要求输出频率可调,矩形波占空比可调等
  10. 建立回归模型的完整步骤