重构原则

本文介绍了软件重构的概念,包括名词和动词含义。阐述了重构的原因,如改进设计、便于理解、找bug和提高编程速度等。说明了重构的时机,如三次法则、添加功能等。还指出程序难修改的原因,以及重构面临的难题,如数据库耦合等,最后提及重构与设计、性能的关系。

何谓重构

 

1. 重构(名词)

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

2. 重构(动词)

使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

 

为何重构

 

1. 改进软件设计

越难看出代码所代表的设计意图,就越难保护其中设计,于是该设计就腐败的越快。

经常性的重构可以帮助代码维持自己该有的形态。

重复代码越多,可能的修改就越困难,所有事物和行为在代码中只表述一次,这是优秀设计的根本。

2. 重构使软件更容易理解

一开始我所做的重构都像这样停留在细枝末节上。随着代码渐趋简洁,我发现自己可以看到一些以前看不到的设计层面的东西。

3. 重构帮助找到bug

对代码的理解,可以帮助我找到bug。

4. 重构提高编程速度

如果没有良好设计,或许某一段时间内你的进展迅速,但恶劣的设计很快就让你的速度慢下来。

你会把时间花在调试上面,无法添加新功能。修改时间越来越长,因为你必须花越来越多的时间去理解系统、寻找重复代码。

良好设计是维持软件开发速度的根本。重构可以帮助你更快速地开发软件,因为它阻止系统腐败变质,它甚至还可以提高设计质量。

 

何时重构

 

1.三次法则——第三次做重复的事

2.添加功能时——新特性的添加困难时。重构使得,在更好的理解代码的同时,改变结构,使得,新特性的添加更快速、更流畅。这也是良好设计的要求。

3. 修补错误时——对代码的理解,可以帮助我找到bug。

4. 复审代码时——复审本身就可以改善开发状况,这和重构有部分相同的目的

 

是什么让程序如此难以修改?

眼下我能想起下述四个原因,它们是:

难以阅读的程序,难以修改;

逻辑重复的程序,难以修改;

添加新行为时需要修改已有代码的程序,难以修改;

带复杂条件逻辑的程序,难以修改。

因此,我们希望程序:

(1)容易阅读;

(2)所有逻辑都只在唯一地点指定;

(3)新的改动不会危及现有行为;

(4)尽可能简单表达条件逻辑。

 

重构的难题

 

1. 数据库

绝大多数商用程序都与它们背后的数据库结构紧密耦合在一起

2. 修改接口

过度强调代码所有权的团队常常会犯这种错误。发布接口很有用,但也有代价。这个代价就是修改的代价,太多的代码已经依赖你的接口。

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

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

我们很难(但还是有可能)将不考虑安全性需求时构造起来的系统重构为具备良好安全性系统。

4. 何时不该重构

现有代码根本不能正常运作。你可能只是试着做点测试,然后就发现代码中满是错误,根本无法稳定运作。

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

 

重构与设计

 

如同前面总结的,它和设计彼此互补。

 

重构与性能

 

先重构,优化阶段再进行性能调优

 

重构起源

 

。。。。。。

 

完。

源码来自:https://pan.quark.cn/s/a3a3fbe70177 AppBrowser(Application属性查看器,不需要越狱! ! ! ) 不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。 支持iOS10.X 注意 目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。 等到Private Header更新了iOS11版本,我也会进行更新。 功能 [x] 已安装的应用列表 [x] 应用的详情界面 (打开应用,删除应用,应用的相关信息展示) [x] 应用运行时信息展示(LSApplicationProxy) [ ] 定制喜欢的字段,展示在应用详情界面 介绍 所有已安装应用列表(应用icon+应用名) 为了提供思路,这里只用伪代码,具体的私有代码调用请查看: 获取应用实例: 获取应用名和应用的icon: 应用列表界面展示: 应用列表 应用运行时详情 打开应用: 卸载应用: 获取info.plist文件: 应用运行时详情界面展示: 应用运行时详情 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用 INFO按钮用来解析并显示出对应的LSApplicationProxy类 树形展示LSApplicationProxy类 通过算法,将LSApplicationProxy类,转换成了字典。 转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值