有次接到个PM要改版一个功能的UI设计,前端童鞋还没敲定页面的时候,我先看了看这个功能的后台,我擦...简直是惨不忍睹。。对PM来说是改版UI,对我这么有点代码洁癖的来说就是优化代码。
首先我能肯定的是,原来这个童鞋对面向对象理解的不太好。。其次对代码的整合不够...我就简单log下。。
先说面向对象理解的问题,在一个入口方法里,去调用该类自己的私有方法,这里传参的时候竟然把类属性的值都传过去了。。当时我就汗了,,显然在被调用的方法里,直接就可以获取这些类属性的值了。。为什么还要去传呢...
再有我说整合能力,这个入口方法是这样做的,取前端传过来的key,通过这个key值的不同,去调用类里的各个不同的方法,而且原来他自己都已经把各个方法名取的和key的值一样了。然而惨不忍睹的是,如果说几个switch的case,这么写不会让人觉得啥。。重点是这个key的值将近有20个...这再这么写下去代码就太糟糕了。。显而易见的是这几十行代码可以看出来是可以用相同代码的。正好php有个函数叫call_user_func(),可以派上用场。比如这样call_user_func(array($this, $_GET['key']));让实例去调用它的key名字的方法。这里有个小问题,比如原来代码里面有的几个不同key,但走了相同的方法。
这时,可以这样构造一个魔术方法__call(),然后在这个魔术方法里,把这几个特殊key构建成个数组,如果$_GET['key']在这里头的,就共同去调用这个方法。或者不使用魔术方法,而先校验是否可以调用,使用is_callable(array($this, $key)),如果返回false,则再调用那个公共方法或怎么着。
仔细看,类里面还有很多值得优化的地方。其实一个类被设计的不该过于臃肿,一个类只需要负责好它自己的事就好了。这里的优化,我就抽取出来几个方法新建了一个类。
顺便我觉得改别人的代码很有意思,发现不合自己意就开始喷哈哈~
=================
说下这次的经验教训吧。。
终于是上线了,总体上说,是很繁琐,但是没有什么挑战性。
得到的一个经验是,别太轻易改动历史代码,同事说是费力不讨好,现在想想还真是。。因为你很难彻底查出来到底有多少地方在用这段代码。。你改了,上线的时候影响到别人了,很麻烦。。还好,改的有个地方还在测试的时候发现了问题。也是个小问题,经验教训还是要吸取的。
还有个教训是,你改动的地方涉及到不同组员之间的协作开发,这时候,上线以后,千万别忘记了其他组改动的文件,这次上线就少了其它组的代码,结果查bug还查了有一会。因为开发环境没问题,线上有问题的时候,debug是很麻烦的,涉及到线上权限的事情。总之,协作开发的时候,考虑周全。别忘了你的代码依赖了别人的代码。
再有一个老生常谈的是,代码写的要有维护性。。别让其他维护你代码的人去咒骂你。。代码结构怎样合理的组织,让修改的时候更容易。当然尤其要写些个注释!!好比我这次经历的一段代码,相当蛋疼,毛注释没有,还充斥了运算符和嵌套。。这烂代码叫谁去维护都得泪崩。。
这两天净忙着改版了,还包括些个历史遗留bug,改别人的代码过程真是充满了各种情绪。。上线以后,心情还是很舒畅的哈哈~