《重构HTML:改善Web应用的设计(修订版)》——1.2 何时重构

1.2 何时重构

应该在什么时候重构呢?在清除和处理过时代码的过程中,何时才算是到了添加新特性的时机?这个问题可能有几个答案,但它们之间并不是互斥的。

重构的第一个时机出现在进行任何重新设计之前。如果你的网站碰到需要重新开发的情况,首要任务是掌控它的内容。此时重构的第一个好处显而易见,你将为新设计的实现创建更牢固的基础。良构、组织良好的页面更容易重新设计样式。

重新设计之前进行重构的第二个好处是,重构过程能帮助开发者熟悉网站。你将会了解页面位置,它们在网站层次上是如何组合起来的,以及哪些是跨页面的通用元素等。同时,还有可能对重新设计产生前所未有的新想法。别急着去实现,把想法都先记录下来(放到问题追踪系统中则更好),在重构完成之后,就可以着手实现了。重构是十分重要的工具,可以帮助网站开发者加速网站的开发。如果他们以前未参与开发这个需要重构的网站,重构的过程会帮助他们了解网站的细节。就算是为网站工作已经超过了10年,重构也能提醒他们一些已经遗忘的东西。无论是哪种情况,重构都能帮助开发者熟悉网站。

新功能可能只出现在新页面,甚至可能只出现在全新的网站上。如果跟旧网站仍有关联,你需要检查一下是否有可借鉴或可重用的东西。样式、图片、脚本和模板或许都可重用。这样确实可以帮你保持新旧网站具有一致的外观。但如果需重用的部分有问题,则应事先清理一番。基于类似的理由,在开发任何基于旧项目的新项目之前,都应该好好揣摩一下重构。比如,如果要实现“一键式购物(one-click shopping)”⑧,先要保证旧的购物车能够满足需要。如果法律部门要求在每一个页面的底部加上限制性附属细则(small print),还得看看每个页面是否都有一个固定的位置可以方便地记录这些信息。没有必要重构所有的东西,但这种改动总是有助于在网站中集成新内容。

最后,或许你会考虑半连续式重构(semicontinuous refactoring)。如果碰到难以一下子解决的问题,不要连续两周无动于衷,在这期间看看还有什么地方是可以重构的。就算是不能解决大问题,也应该马上去做些力所能及的事情来修复一些小问题。尽可能使用敏捷开发方式,编写小部分,测试小部分,重构小部分,如此反复。尽管很多项目都要基于一大堆不良和过时的代码开发,不过如果有未完工项目的话,一定要先保证不让它变成又一个烂码基。一旦看到自己在重复相同的代码,可以把它提取到外部模板或样式表中去。当发现原来的HTML编写者使用了废弃的元素,应该马上使用CSS取而代之(并利用这个机会教育一下这个编写者为何要这么做)。一连串小的但有效的变化累积起来就会带来巨大的效果。

无论做什么,都不要因追求完美而忽视小的改进(勿以善小而不为)。如果眼下的时间足够做一点儿重构,那就只做一点儿。以后有时间还可以做得更多。整体性的重新设计虽然惹人注目令人难忘,但不积跬步又何以至千里?你的目标应该是让代码每天都有新变化。这样坚持几个月,你就会拥有可以骄傲地向人夸耀的清晰代码。

时间: 2024-12-09 07:16:17

《重构HTML:改善Web应用的设计(修订版)》——1.2 何时重构的相关文章

《重构HTML:改善Web应用的设计(修订版)》——第2章 工具 2.1 备份、测试用机和源码控制

第2章 工具 自动化工具是重构的重要组成部分.尽管可以使用文本编辑器手动执行重构,甚至有时出于演示的目的我也使用这种方式,但实际上绝大多数的时候我们都使用软件来辅助工作.据我所知,到本书写作时为止,还没有可用于HTML的主流的重构浏览器(refactoring browser).但已经有很多工具可用在重构的过程中.本章会讲解一些工具. 2.1 备份.测试用机和源码控制 自始至终,我都会在本书中向你展示一些非常强大的工具和技术.伟大的教育家Stan Lee告诉我们:"能力越大,责任越大."

《重构HTML:改善Web应用的设计(修订版)》——1.3 重构什么

1.3 重构什么 诸如Java之类的编程语言和诸如HTML之类的标记语言的重构有一个关键的区别.与HTML相比,Java变化相对缓慢,C++的变化很少,C就更不用说了.用Java 1.0编写的程序跟Java 6的跑起来没有什么大的不同.Java增加了大量新特性,但大体上能保证一致性. 然而,HTML和相应的技术在同样的时间范围内却发生了巨大的变化.今天的HTML跟1995年的根本不是一码事.新版不仅剔除了一些关键字,也加入了一些新的关键字,在语法和解析算法上也有所改变.尽管现代浏览器如Firef

《重构HTML:改善Web应用的设计(修订版)》——2.3 测试

2.3 测试 从理论上讲,重构不应破坏任何未曾破坏的代码,然而在实践中并不是那样.在某种程度上,本书后面会向你展示哪些改动是安全的.但无论是人还是工具都会犯错误,重构也有可能引入新错误,所以重构过程就需要一个良好的自动化测试套件(suite).进行任何重构之后,你更希望可以通过单击一个按钮和扫视一眼就能看到是否有代码被破坏了. 尽管测试驱动开发(test-driven development)在传统程序员中取得了巨大的成功,但在Web开发者中还是不太常见,尤其对前端开发者而言.实际上,网站的任何

《重构HTML:改善Web应用的设计(修订版)》——导读

https://yqfile.alicdn.com/0c06f834eabdbb4769423d9b548f7a707b505925.png" > 内容提要本书采用理论与实践相结合的方式,展示了如何重构HTML,以获得更佳的可靠性.性能.可用性.安全性.可访问性.兼容性,甚至实现良好的搜索引擎优化.书中详细介绍了如何辨别应该重构的Web代码中的"坏味道",如何把旧的HTML转换为良构和有效的XHTML,如何使用CSS改善现有的布局,如何通过用GET替换POST.替换旧的

《重构HTML:改善Web应用的设计(修订版)》——第1章 重构1.1 为何重构

第1章 重构 重构.什么是重构?为何要重构? 简明扼要地说,重构是在不改变程序行为的基础上进行小的改动,是代码基逐渐改善的过程,通常也需依赖于一些自动化工具的帮助.重构的目标是移除长年积聚下来的烂码①,以得到更清晰和更容易维护.除错以及添加新功能的代码. 严格地说,重构实际上并不涉及除错,也不增加新功能.但在实践中,重构的过程总是会碰到需要修正的错误,也会有需要加入新功能的时候.重构通常会化繁为简,化难为易.改善代码的第一步是重组代码. 举个例子,无论是为了开始新的学期,还是从事新项目或新工作而

《重构HTML:改善Web应用的设计(修订版)》——1.4 反对重构的理由

1.4 反对重构的理由 从CEO到经理,他们都对HTML故作沉思,拒绝接受重构的提议.这种情况屡见不鲜,虽然他们有很多说法,但通常不外乎: 我们没有时间浪费在清理代码上.现在马上给我实现这个新特性! 对于这条意见我们可以做两种回应.第一,从长远来看,重构可以节省时间:第二,你拥有的时间实际上比想象的多.这两条都是正确的. 从长远来看,重构可以节省时间,但在短期内这也是可能的,因为整洁的代码更容易修复和维护.以岩石作为基础,比以流沙作为基础更为容易和坚固.跟模糊的代码相比,整洁的代码更易查错.实际

《重构HTML:改善Web应用的设计(修订版)》——2.6 TagSoup

2.6 TagSoup John Cowan的TagSoup是一个用Java编写的开源HTML解析器,它实现了XML或SAX的一些简单API.Cowan说它是一个"用Java编写的兼容SAX的解析器,不是解析良构或有效的XML,而是解析世界上大量存在的劣质.污秽和粗野的HTML,虽然很多时候远远处理不了.TagSoup是为那些使用形似合理的软件处理这些问题的人们而设计的.通过提供SAX界面可以把标准的XML工具应用到甚至最坏的HTML上." TagSoup并没有计划做成一个供最终用户使

《重构HTML:改善Web应用的设计(修订版)》——2.2 验证器

2.2 验证器 即使没有人去遵守,这确实还是HTML的标准.判断网站是否遵守HTML标准的一种方法是,通过验证服务来运行页面.验证结果可以让人有所启发,为你提供修复的明确细节以及一个预估工作量的良好建议. 2.2.1 W3C标记验证服务对于公开页面,可选的验证器是W的标记验证服务.只要输入需检查页面的URL,就可以看到结果了.图2-1是这个服务验证我博客的一个示例. 看起来是我记错了blockquote元素的语法,错把cite当做source属性了.这个服务比我想象中的要好.我修正后重新检查的结

《重构HTML:改善Web应用的设计(修订版)》——2.5 Tidy

2.5 Tidy 正则表达式对于独立的自定义的修改来说确实不错,但对于大量的修改来说难免乏味和困难.特别是,它们更大程度上是用来处理纯文本的,而不是处理半结构化的HTML文本的.为了批量改变和自动修复常见的错误,需要有能识别HTML标记的工具.第一个这样的工具是Dave Raggett的Tidy,它是一个原创的HTML修复器.Tidy作为一个简单的多平台的命令行工具,可以用来修正大量的HTML错误. 2.5.1 -asxhtml为了达到本书的目的,你需要使用-asxhtml命令行选项.例如,这个