阅读全文
引言:这部分内容最早出自笔者写的文章《RePractise:Web开发的七天里》,原文简单描述了Web应用的生命周期。后来发现,这条路几乎是所有Web应用的必经之路。一个Web应用在其生命周期里,都要经历搭建开发环境、创建构建系统、编写代码、进行数据分析等,直至最后使用新的系统来替换这个遗留系统。如果你是一个有经验的开发者,相信你对这个生命周期一定也深有体会。 本篇文章是对《全栈应用开发:精益实践》这本书的一个简单概述。
在我所经历的项目以及我所看到的Web应用里,它们都有相同的很有意思的生命周期。我们经常在网上看到某个知名的网站使用某个新的技术、语言来替换旧的系统,某个App使用新的框架来替换现有的App。我们所看到的都只是这些公司正在重构现有的系统,这实际上是一个周期的结束,以及一个新周期开始。其过程如图0-1所示。 图0-1 Web应用的生命周期
仔细一想就会发现:我们所经历的项目都在以不同的时间长度经历相同的生命周期。
在我开始工作的时候,接触的第一个项目就是一个遗留系统。在一次休息时,我们在比赛找最古老的源码文件,最后找到了10年前写下的一个文件。尽管在我们的代码里有单元测试、针对具体业务功能的测试,项目的代码已经超过20万行,项目中仍然有相当多的代码超出了我们所理解的业务范围。毕竟在这些年头里,有相当多的功能已经不存在了。后来,我们选用微服务重构了这个系统。对于中型的遗留系统来说,这算是一剂良药。 让我们先从某某网站使用新架构重新设计说起。当我们决定使用新架构重新设计系统时,原因可能是多种多样的,如果我们排除一些无法抗拒的因素(如政治),那么剩下的原因可能就只有两个。
系统已经变得难以维护。这里的原因仍然有很多:大量的代码已经没有人知道其业务逻辑,变得难以修改;代码间耦合度过高,重构系统的难度过于复杂;项目所使用的技术栈已经过时,已经被市场所淘汰;团队的技术栈在成员变动的过程中,团队中大部分成员的技术栈已经和当前的项目不匹配了。系统的技术栈已经难以符合业务的需求。绝大多数情况下,我们在最初开始创建项目的时候,所选择的技术栈都是符合当时业务需求的技术栈、可以快速验证其业务价值的技术栈。而随着业务的扩张,现有的技术栈很快将难以满足当前业务的需求,或出现性能优化上的限制。在多数情况下,我们都会将这种系统称为遗留系统。在这时团队里的气氛便是“能不动这些代码就尽量不去动它”。我们已经很难将项目的问题归为人的因素,多数时候都是受业务扩张的影响。作为一个专业的程序员,我们的本能就是将程序写好,而我们往往没有这样的机会。 业务人员对项目经理说:“我们的竞争对手已经在本周上线了这个功能。” 项目经理对开发人员说:“这个功能下星期就要上线!” 是的,我们的功能不得不马上上线。这时候,我们往往要在代码质量和交付速度上做出一些妥协。妥协多了,系统也就变烂了。 开发人员说:“这个代码我不太敢修改,要是出了什么大Bug怎么办?”慢慢地人们就开始讨论起重构系统的事宜,并开始着手设计新的架构—使之可以满足当前的业务需求、可预测时间内的业务与技术需求。
在讨论新架构的过程中,不同的人可能会有不同的技术偏好,也会因存在一些政治因素导致不同技术方案的产生。如团队中的一些人可能出于稳定缘故而选择Java,一些人可能出于对新技术的需求选择Scala,而另外一些人可能考虑到团队中大部分人可能因为都会使用JavaScript而选择使用JavaScript。如图0-2所示,我们的考虑应该不仅仅取决于这一系列的技术因素。
阅读全文