Prefactoring——Introduction

Introduction

听到有人说《Prefactoring》是一本好书:“能提升数十年的功力”,虽然过于夸张,但也说明这本书还是值得一读的,不然怎么会得了JOLT大奖呢?如作者所言,读本书需要一定的开发经验的积累,否则茫然不知为何,收获不大。

最近花时间看了看《Prefactoring》,把所得记录下来。

What about Prefactoring?

在软件开发中,我们常常谈论重构(Refactoring),它已经是一个被广泛认可的开发方法,它可以提高软件的品质;而且很多开发者在开发中也找到了可以省事的理由:“现在就这样简单处理吧,以后再进行重构”,可事实上,他可能永远都没有机会和功夫去做重构了。的确,每个项目和产品都有成本(资金和人力)和时间的限制,“重构”在很多项目中往往只是一个概念,而没有实践。

针对这样的现状,Ken Pugh提出了Prefactoring——防患于未然,在项目开始前预先进行思考,三思而后行;根据既有的经验和指导原则来避免落入软件开发中诸多的陷阱,在开始编码前就预先做出好的设计来,以降低重构的代价——这似乎并没有多少新意,因为在历史的长河中,人们向来都会以史为鉴;而诸多Design Principle/Design Pattern/XXX Driven Development都告诉我们如何使得代码能适应一定的变化,易于调整和修改。不过,作者根据自己多年丰富的经验,列出了诸多的指导原则,强调了软件开发流程的重要性,告诉我们如何在开发中应用一些原则来减少我们重构的次数,降低重构的代价,毕竟重构可能是要付出很大的代价的。本书也从侧面反映了开发团队中需要有经验丰富的开发者进行指导,人的作用不言自明,和《软件工艺》中所云暗合,Ken Pugh正是在向我们传授他的“技艺”。

Refactoring & Prefactoring

预构和重构可说是关系密切:

1、  重构是在写代码之后进行的,而预构则是在写代码之前。

2、  重构中的一个重要方法是Extract Method,而预构中的“Separate Policy”则可以帮助我们少作Extract Method。

3、  预构和重构一样不强调做big design。但是预构的原则告诉我们应该花一些时间去调查软件的环境(包括业务和技术等方面)。

4、  预构不反对重构,而是致力于减少重构的次数,降低重构的代价。

5、  重构关注的是代码的code transformations,而预构则不止于此。预构还建议我们尽量利于可以利用的东西,比如一些优秀的open source的project,而不是一开始就自己写每一行代码。

Postscript

预构看起来有些像关于设计的指导原则,而并没有到达方法学的高度,作者强调了设计和开发过程的重要性,尤其是设计的重要性,这点和RUP倒是有共同的地方——预先做出好的设计,好的设计能让项目大大降低技术风险。

Reference

Prefactoring: Extreme Abstraction, Extreme Separation, Extreme Readability

Prefactoring and Refactoring

《Prefactoring》避开重蹈覆辙的陷阱

[推荐]Prefactoring- -

转载于:https://www.cnblogs.com/jiezhi/archive/2006/07/26/460177.html

Prefactoring——Introduction相关推荐

  1. Prefactoring——Guidelines

    Prefactoring--Guidelines Prefactoring--Introduction Introduction 虽然Prefactoring这个概念并无多少新意(个人看法),但Ken ...

  2. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  3. 网络增强现实开发简介 Introduction to Web AR development

    搭配webXR.mindAR.three.js和tensorflow.js 你会学到: 获得构建不同类型的网络增强现实应用程序的实践经验,包括图像效果.人脸效果和世界效果 获得关于增强现实如何在网络浏 ...

  4. ZBrush全面入门学习教程 Schoolism – Introduction to ZBrush

    ZBrush全面入门学习教程 Schoolism – Introduction to ZBrush ZBrush全面入门学习教程 Schoolism – Introduction to ZBrush ...

  5. 视频色彩校正简介 Introduction to Video Color Correction

    视频色彩校正简介 Introduction to Video Color Correction 视频色彩校正简介 Introduction to Video Color Correction MP4 ...

  6. [转]Introduction of iSCSI Target in Windows Server 2012

    Introduction of iSCSI Target in Windows Server 2012 源地址:http://blogs.technet.com/b/filecab/archive/2 ...

  7. MS UI Automation Introduction

    MS UI Automation Introduction 2014-09-17 MS UI Automation是什么 UIA架构 UI自动化模型 UI自动化树概述 UI自动化控件模式概述 UI 自 ...

  8. 音频(3):iPod Library Access Programming Guide:Introduction

    Next Introduction 介绍 iPod库访问(iPod Library Access)让应用程序可以播放用户的歌曲.有声书.和播客.这个API设计使得基本播放变得非常简单,同时也支持高级的 ...

  9. 2018-3-25论文(Whale Optimizer Algorithm)+(Gery Wolf Optimizer)笔记二---Introduction 对比

    代码以及文论的来源: Seyedali Mirjalili http://www.alimirjalili.com/Projects.html 感谢作者!!! 2014年GWO Introductio ...

最新文章

  1. Shell脚本中的并发
  2. EOJ Monthly 2019.2 (based on February Selection) D.进制转换
  3. Python基础第一天
  4. vue从url中获取token并加入到 请求头里_轻流amp;amp;企业微信——获取打卡数据...
  5. python列表生成式内必须定义匿名函数_Python基础-----基础概念总结
  6. Spring4.x()---JdbcDaoSupport的使用
  7. 页面引入多个echarts_JavaWeb之Echarts数据统计图表详细教程
  8. VUE2.0 elemenui-ui 2.0.X 封装 省市区三级
  9. 计算机鼠标显示停顿原因,经常遇到鼠标指针停顿卡的解决方法
  10. AP3128 DC/DC转换器 小封装,高性能 异步升压10白光LED驱动
  11. PC微信端浏览器js点击失效
  12. 你还在为不知道怎么给家人庆祝生日而发愁吗?
  13. 我喜欢生命本来的样子
  14. JESD204B SUBCLASS1确定性延时参数的计算
  15. 中国记账软件行业现状规模与应用前景预测报告(2022-2027)
  16. noip2016普及组初赛中山市成绩表及分数线
  17. vue 使用 :class 根据不同状态值设置状态文字颜色不同
  18. 伏地魔爱上林黛玉?就没有B站不能组的CP!
  19. 遥控车钥匙算法之KeeLoq
  20. 刚刚开通,感受一下此地气氛

热门文章

  1. CVPR 2020 论文大盘点-图像增强与图像恢复篇
  2. 百度EasyDL深度学习实战营,免费教你转型AI工程师!
  3. 数十亿次数学运算只消耗几毫瓦电力,谷歌开源Pixel 4背后的视觉模型
  4. php成品网站安装,PHPweb成品网站安装环境要求和安装方法
  5. python批处理将图片进行放大实例代码
  6. 程序员需要学习太多数学知识吗?
  7. 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
  8. 【绝对干货】TEASER前传之QUASAR:基于四元数的存在外点Wahba问题的可证明最优解
  9. 图像数据转换成db(leveldb/lmdb)文件(转)
  10. java outer关键字_java中的关键字