当我完善几年前的一个老项目时,我做了哪些改进

简介: 最近几个月利用业余时间完成了一个项目。这个项目其实是2008年我在前公司做的一个web项目。后来客户想要对项目做升级,牵扯到一些功能的变动及界面的修改。由于当时整个项目的架构和主要编码都是我做的,所以前公司老总喊我来接这个项目,使用业余时间完成。

最近几个月利用业余时间完成了一个项目。这个项目其实是2008年我在前公司做的一个web项目。后来客户想要对项目做升级,牵扯到一些功能的变动及界面的修改。由于当时整个项目的架构和主要编码都是我做的,所以前公司老总喊我来接这个项目,使用业余时间完成。我考虑了一下答应了。为了挣点钱养家就拼点呗。

几个月前在接这个活前,我曾写过一篇文章如果让我完善几年前的一个项目,我会做哪些改进?。主要从工程实践的角度讲述了我将进行那些改进。

经过几个月的辛苦开发,终于完成了这次的功能升级,拿到了报酬。针对这种遗留系统,我来谈谈我具体都进行了那些改动。

  1. 不用动的地方尽量不动。由于代码是08年我作为实习生写的,那代码自然惨不忍睹,有些地方写的非常累赘。经过几年打磨的我对代码质量要求已经上升了很多个层次,看到这些烂代码不禁忍不住要重构。但是我忍住了,因为这是个遗留系统,当时就没有写单元测试,所以重构过程肯定风险较大。另外工期只能用业余时间,要以新需求为主,只改开发新需求时需要碰的那些代码。

  2. 使用github作为代码托管服务。即使是一个人开发,也需要使用源代码管理工具,这样做起来自己心里才有底。而github自己用了好几年了,非常好用,而且自己买了github的会员。所以这次把代码以私有仓库的方式放在上面。随时写,随时提交,比自己搭建源代码服务器方便的多。

  3. 引入bootstrap框架作为前端框架。这次升级一个重要任务是对前端进行优化,使其能兼容多个浏览器。08年的时候大家都在用IE6,IE7,IE8都很少有人用。过了这么多年网站早都不能兼容现代浏览器了,而且屏幕分辨率适配也很差劲。作为一个前端菜鸟,我只花了一点时间学习了bootstrap,就快速把它引入到了我的项目中。我基本上把以前的css、js代码都删除了,使用bootstrap轻轻松松的就把这个老站改成了一个兼容多个浏览器,多种屏幕尺寸的网站。

  4. 升级.net中使用的各种组件。这个网站使用的是WebForm框架,版本为2.0。我发现在现代浏览器下WebForm组件生成的前端HTML,CSS及JavaScript存在大量不兼容的问题。网站页面变得很不稳定。当升级到4.0平台后,问题得到大大改善。另外我还使用了AjaxControllToolKit组件,发现在某些浏览器下(比如360浏览器)页面局部刷新不了。所以我也一并升级到了最新的15.3版本。虽然把各种组件都升级了,还存在一些JavaScript问题,比如日历选择框无法正常显示与选择。我采用的方法就是抛弃掉旧的JS代码,寻求成熟的JS框架来替代。比如使用bootstrap-datepicker组件来实现日历框的选取。

  5. 采用最新的Visual studio编辑器。微软终于想通了,与其让我们天朝成天用盗版的Visual Studio,不如直接开放一个社区版出来。我下载了Visual Studio 2013社区版,并给其装上了ReSharper组件。由于ReSharper是收费的,但是有差不多1个月的试用期。之前一直使用Intellij开发工具做开发,能在Visual Studio 2013中使用它也是觉得很爽。

  6. 引入了package管理工具,使用Nuget来安装、管理各种项目依赖。使用过程中我发现Nuget没有Java平台下的Maven或Gradle强大。很多依赖都不是最新版本,管理理念也不太一样。不过聊胜于无吧。像bootstrap等前端组件以及ajaxcontrolToolkit等后端组件我都是通过Nuget来管理的。

  7. 使用事务机制处理系统中的核心逻辑。这个系统是一个编码管理系统,主要处理***、雷管编码的整个流通过程。系统有的时候会出现重复编码的情况,比如一发雷管的编码同时存在于库存中和消耗库中。这是由于雷管从在库状态转换为消耗状态时出了问题,并没有在库存中删除该编码。这次升级我把类似的逻辑都用事务来处理,一旦发生异常就会整体回滚,不会造成脏数据的情况。

其实我还想引入的几个点由于种种原因都没有完成。

  1. 没有添加单元测试。本来想给Vistual Studio 2013添加单元测试框架,奈何花了几个小时都没整好。另外工程目录方面也需要进行一定的调整来引入测试项目,整了一次没搞定后也不了了之。由于这次升级80%功能是前端页面的改进,涉及后端代码修改的不多,所以没有单元测试的情况下修改已有代码还是比较有信心的。

  2. 没有引入持续集成。还是时间成本的原因。毕竟这个活都是使用业余时间完成的,搭建C#栈的CI估计要花上好几天,所以最后并未实现。

  3. 自动化部署。之前对.NET下的网站的部署都是手动的,将编译生成后的文件复制到服务器上,暂停IIS,重载文件,重新启动IIS。其实这些都是可以自动化完成的,自己没花时间研究,所以也未实现。

  4. 使用成熟的log框架给系统关键逻辑打上log。这个纯粹是自己懒,不想做。因为加log方便自己以后排查错误,对客户来说没有任何影响,自己就懒得弄了。

  5. 没有引入自动化测试。还是时间成本的原因,编写web的自动化测试太花时间了,所以只能舍弃。

相关文章
|
17天前
|
开发框架 运维
项目中的技术债
项目中的技术债
|
17天前
|
存储 运维 jenkins
放弃"Jenkins"的种种理由,期待更好赋能研发的"持续交付平台"
Jenkins 很酷,但是不完美,有历史局限性造成的问题。本文仅从“如何更好给研发团队赋能的角度”,剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告~
|
8月前
|
缓存 运维 项目管理
项目管理的变革引领者:如何有效地引入变化并带领团队迈向成功?
项目管理的变革引领者:如何有效地引入变化并带领团队迈向成功?
36 0
|
敏捷开发 测试技术 API
【企业架构】Salesforce CTA 的持续学习:十本关于企业架构、战略和工程的好书
【企业架构】Salesforce CTA 的持续学习:十本关于企业架构、战略和工程的好书
|
监控 容灾 Cloud Native
被你质疑价值的混沌工程,阿里巴巴已落地实践了9年
无可讳言,对于混沌工程的价值,目前在业内还没有一个明确的度量标准,但是可以通过简单的例子来有效佐证。据中亭介绍,一方面可以先选定一个场景,从结果上看,混沌工程可以保证场景不劣化;另一方面,如果度量组织进行突袭,不管系统架构和人员架构怎么变,监控结果都在合理的范围内。总体而言,混沌工程的核心就是增强信心,保证系统在某个场景下的能力不退化。只要这个组织有度量“特定场景下能力是否退化”的指标,混沌工程的价值就显而易见了。
655 0
被你质疑价值的混沌工程,阿里巴巴已落地实践了9年
|
人工智能
七个常见的IT经验教训可能会促进未来工作的成功发展
IT专业人员分享了他们在职业生涯早期所吸取的难得的经验教训,这为职业生涯的长期成功发展铺平了道路。
244 0
|
前端开发 JavaScript 物联网
玉伯:前端的现状之痛及未来趋势
在 GMTC 北京上,我听了蚂蚁金服玉伯老师的分享。玉伯 2008 年加入阿里,在这期间,他和团队一起折腾过 KISSY、SeaJS、Ant Design、AntV 等开源项目,现在我们都喜欢用的语雀也是他团队的产品。
419 0
玉伯:前端的现状之痛及未来趋势
|
敏捷开发 移动开发 监控
从用户扩张到技术更迭复盘社区的体系搭建
社区也借用了第三方数据产品——友盟+,不管是哪一家公司的数据产品,都会有对应的使用场景。在教育、医疗、金融等不同的行业,所用数据的使用目的都不同,用户分群而视之,如医疗行业是提高用户留存,金融行业进行网站优化、提高线索转化等,每个行业都有各自的数据优势。
从用户扩张到技术更迭复盘社区的体系搭建