最近几个月利用业余时间完成了一个项目。这个项目实际上是2008年我在前公司作的一个web项目。后来客户想要对项目作升级,牵扯到一些功能的变更及界面的修改。因为当时整个项目的架构和主要编码都是我作的,因此前公司老总喊我来接这个项目,使用业余时间完成。我考虑了一下答应了。为了挣点钱养家就拼点呗。css
几个月前在接这个活前,我曾写过一篇文章若是让我完善几年前的一个项目,我会作哪些改进?。主要从工程实践的角度讲述了我将进行那些改进。html
通过几个月的辛苦开发,终于完成了此次的功能升级,拿到了报酬。针对这种遗留系统,我来谈谈我具体都进行了那些改动。前端
不用动的地方尽可能不动。因为代码是08年我做为实习生写的,那代码天然惨不忍睹,有些地方写的很是累赘。通过几年打磨的我对代码质量要求已经上升了不少个层次,看到这些烂代码不由忍不住要重构。可是我忍住了,由于这是个遗留系统,当时就没有写单元测试,因此重构过程确定风险较大。另外工期只能用业余时间,要以新需求为主,只改开发新需求时须要碰的那些代码。git
使用github做为代码托管服务。即便是一我的开发,也须要使用源代码管理工具,这样作起来本身内心才有底。而github本身用了好几年了,很是好用,并且本身买了github的会员。因此此次把代码以私有仓库的方式放在上面。随时写,随时提交,比本身搭建源代码服务器方便的多。github
引入bootstrap框架做为前端框架。此次升级一个重要任务是对前端进行优化,使其能兼容多个浏览器。08年的时候你们都在用IE6,IE7,IE8都不多有人用。过了这么多年网站早都不能兼容现代浏览器了,并且屏幕分辨率适配也不好劲。做为一个前端菜鸟,我只花了一点时间学习了bootstrap,就快速把它引入到了个人项目中。我基本上把之前的css、js代码都删除了,使用bootstrap轻轻松松的就把这个老站改为了一个兼容多个浏览器,多种屏幕尺寸的网站。web
升级.net中使用的各类组件。这个网站使用的是WebForm框架,版本为2.0。我发如今现代浏览器下WebForm组件生成的前端HTML,CSS及JavaScript存在大量不兼容的问题。网站页面变得很不稳定。当升级到4.0平台后,问题获得大大改善。另外我还使用了AjaxControllToolKit组件,发如今某些浏览器下(好比360浏览器)页面局部刷新不了。因此我也一并升级到了最新的15.3版本。虽然把各类组件都升级了,还存在一些JavaScript问题,好比日历选择框没法正常显示与选择。我采用的方法就是抛弃掉旧的JS代码,寻求成熟的JS框架来替代。好比使用bootstrap-datepicker组件来实现日历框的选取。ajax
采用最新的Visual studio编辑器。微软终于想通了,与其让咱们天朝整天用盗版的Visual Studio,不如直接开放一个社区版出来。我下载了Visual Studio 2013社区版,并给其装上了ReSharper组件。因为ReSharper是收费的,可是有差很少1个月的试用期。以前一直使用Intellij开发工具作开发,能在Visual Studio 2013中使用它也是以为很爽。bootstrap
引入了package管理工具,使用Nuget来安装、管理各类项目依赖。使用过程当中我发现Nuget没有Java平台下的Maven或Gradle强大。不少依赖都不是最新版本,管理理念也不太同样。不过聊胜于无吧。像bootstrap等前端组件以及ajaxcontrolToolkit等后端组件我都是经过Nuget来管理的。后端
使用事务机制处理系统中的核心逻辑。这个系统是一个编码管理系统,主要处理炸药、雷管编码的整个流经过程。系统有的时候会出现重复编码的状况,好比一发雷管的编码同时存在于库存中和消耗库中。这是因为雷管从在库状态转换为消耗状态时出了问题,并无在库存中删除该编码。此次升级我把相似的逻辑都用事务来处理,一旦发生异常就会总体回滚,不会形成脏数据的状况。浏览器
其实我还想引入的几个点因为种种缘由都没有完成。
没有添加单元测试。原本想给Vistual Studio 2013添加单元测试框架,奈何花了几个小时都没整好。另外工程目录方面也须要进行必定的调整来引入测试项目,整了一次没搞定后也不了了之。因为此次升级80%功能是前端页面的改进,涉及后端代码修改的很少,因此没有单元测试的状况下修改已有代码仍是比较有信心的。
没有引入持续集成。仍是时间成本的缘由。毕竟这个活都是使用业余时间完成的,搭建C#栈的CI估计要花上好几天,因此最后并未实现。
自动化部署。以前对.NET下的网站的部署都是手动的,将编译生成后的文件复制到服务器上,暂停IIS,重载文件,从新启动IIS。其实这些都是能够自动化完成的,本身没花时间研究,因此也未实现。
使用成熟的log框架给系统关键逻辑打上log。这个纯粹是本身懒,不想作。由于加log方便本身之后排查错误,对客户来讲没有任何影响,本身就懒得弄了。
没有引入自动化测试。仍是时间成本的缘由,编写web的自动化测试太花时间了,因此只能舍弃。