写在前面话

项目从13年1月份,现场开发,4月中旬,项目开发接近尾声,三个开发,留两个在现场,我被调回公司,5月份现场一同事离职,只有一个同事在开发,结果PM想让这一个同事承担余下的开发和bug工作,结果意外的这一同事离职,离职前一周,我又来现场,接手他的工作,还好bug比较简单,木有神马复杂的功能,从这修一周的bug来看,感想挺多的,随笔记录几点。

共用VS各自独立(复杂逻辑VS简单copy)

在4月调回之前,有一同事接手我的工作,后来这部功能需求有较大的变更,这一同事在回到公司经常给我说的一句话就是:“你写的那块代码,我全部重写了”,我听了之后第一感觉是需求肿么可能变化那么大,重写就重写吧,当然也有一点不爽,难道我写的代码就那么差劲,要重新写吗?

我的方式(共用)

那部分的场景,功能主页index.jsp,单个业务处理页面deal.html,批量处理界面batchDeal.html,我负责开发5个功能,每个功能都是这样的界面结构,单个业务处理和批量处理的界面有重复部分,我将重用的界面抽取出来,生成三个独立的界面,这么做的唯一目的就是提高界面的重用性,但是这样子也导致界面获取的逻辑变的复杂,需要认真的去看才能看明白,当时编写这块代码的时候,有方法及代码块这两个级别的注释,木有写这块的整体思路,这点是自己做的不够好,但是仔细看是能看懂的,需要时间。

同事的方式(copy、paste)

修改之后的,各个界面处独立,单个业务处理页面是单个的,批量处理的界面是批量处理的,所有关于这个大模块的功能都是这样子开发(共计16个功能,两个人完成),界面、js的代码功能逻辑相似,但各个界面都是自己,相同的名字,唯一不同的是这些界面、js放的路径不同,这种模式开发起来快、简单、复制、粘贴就OK,我个人觉得不足就是重用,重用性不好,记得以前一味大师说过,当写代码到复制、粘贴的时候,说明代码就需要重构了,也可能是时间来不急,同事只能这样子。

这样一来,如果界面或js(共用部分)木有bug最好,但是一旦有,那么那16个功能都会有,并且要去修改16个地方,在我修bug的时候,可是偏偏这一块的界面有问题,界面上的文字要修改、要加必填项提示和校验,这下可好了,要修改的地方可多了,一个一个去找吧,还好复制的有规律,比较容易,但是个人觉得通过抽象共用界面,只需要修改一个地方即可,但是代码逻辑可能相对copy、paste的方式复杂,但是也有它的好处。

自工作到现在,这个问题我也在想,那种方式更好呢?或者木有更好的,只有合适的吧。

JS文件拆分VS一个JS文件

我的方式

我喜欢的方式是按业务功能、JS功能拆分,达到松散耦合的目的,但是一定程度上可维护性不好,用同事的话说就是找一个方法还得找不同的文件中查找,很麻烦(这点在不规范的开发流程中确实存在,并且是相当的麻烦,有时候为了一个方法要翻好几个JS文件),但是,我觉得这个不是个神马问题了,因为规范的开发流程是可以避免的,现在会麻烦呢,是国为目前的开发流程或方式存在问题了(这个仅是个人看法)。个人觉得JS文件的拆分有一定的好处,一是重用的问题,按是职责单一,有人觉得js文件多了,但是可以部署的时候将js文件压缩成一个即可。

目前开发都是看需求,然后写代码,木有编写设计文档、也木有将脑中的想法落实到文档中去,JS文件、JSP分件的拆分随着自己心中的想法而写,时间久了,自己都可能搞不清楚,更不要说后续的开发者,目录划分、JS、JSP等文件的命名、及功能描述都需要落实到详细的设计文档都其它文档中去。当然后续的开发者不要一上来就是看代码,神马都不管,先搞代码,我觉得这个是开发人员最忌讳的,可是好多人往往这样子。

同事的方式

所有功能放到一个js文件中,个人觉得对于维护,只看代码,不关注文档的人,寻找某个方法简单、快速、容易,然而js文件内容量很大,达到上千行,滚动条长,翻着麻烦,且一个界面的功能放到一个JS中,导致一个JS文件承担的职责比较多,不太符合设计的一些原则。另外我也觉得一些用户可能只是经常使用一个功能点(可理解为一个操作,例如新增操作),只需要新增的JS,但是如果JS文件不拆分,导致你无论你需要那个功能都得引入所有JS代码,功能点或者功能(模块)之间耦合度比较高。

模糊查询不区分大小写

出现的bug列表中好几个是关于查询的问题,如果查询采用了like关键字,几乎所有的此类查询都区别了大小写,往往实际情况是不需要的,这些是吸取了教训,得记住我。

JSP、JS文件命名

我的习惯是除目录区分之外,给每个界面取一个有意义的名称,例如,人员管理,我会用xxx/userManager/userManager.jsp这种目录结构,而同事的习惯是xxx/userManager/index.jsp,所有功能主页都是使用index.jsp,当然如果使用个别,个人感觉不错,看到这个界面,就知道它是某个功能的主页了,可是当打开的多了,就不好区分了,当然各有优势。


小结


纯属感受,无优劣之分

最近修bug的一点感悟的更多相关文章

  1. 调bug的一点感悟

    出错时一定要先看错误日志,要知道出什么错了,所以平常在可能出错的地方都要输出错误日志. 不要根据脑中的设想去调bug,时间久了就没有耐心,一烦躁起来,思维定势了,就越调不出来了. 所以一般半小时还找不 ...

  2. 朋友,请待你的朋友——BUG好一点!

    程序猿嘛,难免会被BUG缠身,我相信,没有一个程序猿在被BUG缠身时是感觉轻松的,消灭BUG一定是你最大的愿望.本周,我们团队的项目进入调试阶段,各种BUG层出不穷,眼看下个周就要进行项目答辩会,所以 ...

  3. 分析jQuery源码时记录的一点感悟

    分析jQuery源码时记录的一点感悟      1.  链式写法      这是jQuery语法上的最大特色,也许该改改POJO里的set方法,和其他的非get方法什么的,可以把多行代码合并,减去每次 ...

  4. 转:五年java人的一点感悟

    转自:五年java人的一点感悟 恍然间,发现自己在这个行业里已经摸爬滚打了五年了,原以为自 己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过程中却遭到了 ...

  5. 会编程的 AI + 会修 Bug 的 AI,等于什么 ?

    2017-02-25 Python开发者 (点击上方公众号,可快速关注) 关于人工智能未来的畅想,除了家庭服务机器人,快递无人机,医用机器人等等,Lucas Carlson 认为人工智能在另外一个领域 ...

  6. 修bug感悟

    今天遇到了两个问题: 1. 使用 python 的 PIL 库读取照片的尺寸,对于有些图片,长宽和显示的效果相反,原因是照片中的 exif 有个属性 orientation,表示图片的翻转角度,详细说 ...

  7. C# CRC校验的一点感悟

    今天在鼓捣一个手持操作器的时候,遇到一点问题,记录一下今天的经验包 由于之前公司产品在校验时基本上都是和校验,今天在准备用C#模拟一个古董操作器的时候,却遇到一个问题,模拟器发出的数据,主板一律不回复 ...

  8. 谈谈对bug的一点想法,说说做好日志记录的重要性

    说起程序猿,总绕不开的一个话题就是bug,估计每个程序猿听到某某测试跑过来一脸淫笑的告诉你这个功能有个bug的时候,总有种恨不得掐死他的想法.其实程序猿跟bug的关系,感觉有点像父亲和儿子的关系,自己 ...

  9. 关于提BUG的一点思考以及工作中总结的规范

    在测试的工作中,提BUG是日常工作. 以前自己为了省事,省时,仅仅是截图,在图片上注明一下问题,就放到BUG库中了. 现在发现这样会造成开发的时间的浪费,增加了沟通成本. 对于BUG,当发现了异常时, ...

随机推荐

  1. Linux下tomcat管理查看控制台|杀死tomcat进程

    查看控制台 # tail -f catalina.out 脚本执行权限chmod u+x *.sh #看是否已经有tomcat在运行了 ps -ef |grep tomcat #如果有,用kill; ...

  2. JS实现全选,用于界面批量操作向后台传值时使用

    function seltAll(){ var chckBoxSign = document.getElementById("ckb"); //ckb 全选/反选的选择框id va ...

  3. Performing User-Managed Database-18.4、Restoring Datafiles and Archived Redo Logs

    18.4.Restoring Datafiles and Archived Redo Logs 假定介质故障损坏的一个或多个数据文件,数据文件必须恢复损坏的文件之前恢复. 该位置是不是想恢复原来姿势. ...

  4. Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION

    原文:Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION Installshield获取安装包版本的系统变量为IFX_PRODUCT_VERSION 当笔记记下 ...

  5. SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用

    原文:SQL点滴6-"微软不认识闰年2月29日"&字符"N"的作用 http://www.cnbeta.com/articles/50580.htm这个 ...

  6. Java 之复合赋值运算符

    1.引入问题 切入正题,看下面代码,结果应该是怎么样的 public class App{ public static void main( String[] args ){ byte a=1 ; i ...

  7. mvc拦截器

    在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器.这里说的是第一种和第三种.其实所谓的ASP.NET MVC拦截器,也没什么神秘的,就是一个普 ...

  8. PLSQL-Developer数据库连接工具使用方法

    PLSQL-Developer数据库连接工具使用方法 该方法适用于本机未安装Oracle客户端的情况下如何让连接到数据库.经过本人亲自测试绝对可以连接.前提是您安装的版本没有问题,如您安装的版本有问题 ...

  9. .NET Framework和C#版本历史概览

    发布日期 .Net版本 C#版本 CLR版本 开发工具 功能介绍 2002 1.0 1.0 初始版本 Visual Studio .Net 初始版本 .NET框架结构,详见: 2003 1.1     ...

  10. HttpModule应用

    由做网站操作日志想到的HttpModule应用   背景 在以前的Web项目中,记录用户操作日志,总是在方法里,加一行代码,记录此时用户操作类型与相关信息.该记录日志的方法对原来的业务操作侵入性较强, ...