拯救腐朽项目的步骤 (steps to save a fallen project )
访问量: 3716
在搭建环境的过程中:
1. 没有文档。 不知道如何在本地搭建环境
目前: 所有的开发都是直接把代码'dui3'到生产服务器上。 在钢丝上敲代码。
要安装哪些lib, 哪些 dependency, 哪些数据库,都要写清楚。 比如: 项目A,依赖了3中DB: mysql, mongodb, redis.
2. 没有本地数据库。
目前: 所有开发都是链接生产数据库。
解决办法: 把远程的生产数据库导出来。 由于远程数据太多,所以mysqldump 时只导出前2000条数据 。
3. 文件不全。
目前:很多配置文件和运行文件都不在SCM中。
解决办法: 对比远程的数据,把文件一点一点下载到本地。 对于某些敏感的配置文件, 把它从 settings.py 变成 settings.py.example
4. 部署方式不规范
目前: 改好代码之后, 把相关的代码SFTP到生产服务器上。
解决办法: 使用capistrano 做部署, 可以自动化部署,省时省力。而且可以回滚。
5. 有很多多余的文件,放到了 SCM中。
目前: .pyc 这样的编译文件, 以及 .svn 文件,都保存在了 git 中。
解决办法: 把它们都删掉。
$ git rm *.pyc $ find . -name .svn -exec git rm -rf {} \;
6. css, js 文件 过多,没有合并。
目前: 124个外部 js 文件, 26个外部 css 文件, 每次加载时间 在800ms
150 requests ❘ 78.3 KB transferred ❘ 740 ms (load: 793 ms, DOMContentLoaded: 760 ms
解决办法: 将各种 js, css 都合并。 (例如ruby中的 asset_packager: https://github.com/sbecker/asset_packager )
7. 命名不规范。
目前: page2/index.html page3/index2.html , xyh = '', btz = '' ,完全看不懂。 甚至还有f#ck 这样的文件名。 -_-!
解决办法: 改成有意义的名字,比如: apple = '' tree = '' is_from_remote = '' ,
8. 各种依赖的外部地址,直接写在了代码中,没有提取出公共的常量,
目前: 某个地址依赖的外部应用 : some_app.com 总共出现了6次。而如果不考虑端口,则出现了20多次。
解决办法:把所有依赖的外部应用都提取到一个配置文件当中。这样修改起来也会很方便。
9.方法过长:
目前:程序的入口方法,超过了1200行。注意:这是一个方法哦亲!
解决办法: 重构,extract method.
10.代码没有整理过。处女座情何以堪。
解决办法: 果断代码美化啊亲! http://jsbeautifier.org/ (非常给力, 原来7000行的代码,美化之后(变成 4220 行))
11. 各种 bad smell 的代码:
# 老旧代码: if res_u != None: c.execute(" select user_id,role_id from `stat_acl_role_user` where user_id = %s " % res_u[0]) res = c.fetchall() else: c.execute(" select user_id,role_id from `stat_acl_role_user` limit 1 " ) res = c.fetchall() # 整理后的代码: (这里用一个 三元表达式 更合适 ) if res_u != None: sql_string = " select user_id,role_id from `stat_acl_role_user` where user_id = %s " % res_u[0] else: sql_string = " select user_id,role_id from `stat_acl_role_user` limit 1 " c.execute(sql_string) res = c.fetchall()