如何优化coding
如何优化coding
前言
最近一直在做修改bug工作,修改bug花费时间最多的不是如何解决问题而是怎样快速读懂代码。如果代码写的好的,不用debug就可以一眼看出来哪里出了问题。实际上,我都要debug好多遍才能差不多理解这个业务逻辑,进而分析原因以及修改修复的代价。这项工作花费了我绝大部分的时间,而且并没有什么意义,因为fix bug之后就再也不会处理这些代码了。
因此,易读性应该放在代码的首要位置,如果长期维护的话。
1.好的命名规范和良好的注释
什么样的命名才是好的?可以表明这个方法的功能,而且名字长度不要太长。如果名字无法完整的表述含义,则应该添加注释。我debug的代码从来没看到过注释。
2.讨厌的if
if用的真不要太多,debug的时候发现一个if又一个if,if里面嵌套if。也许这是为了逻辑的完整性,但是千万要在每个if分支里都给出一个结束的定义,即这个if结束了,主要做了什么。经常debug if之后还没有理解这个分支是干嘛的,然后去看下一个分支。
不应该鄙视if,因为这是业务发展过程中代码的补充。突然换了需求,又不能丢掉原来的代码,只能if。随着时间推移,问题也就出来了。应该想着去换个设计模式去重构这段代码,而不是赶时间加一个if,这个在后期维护中是代价极大。
3.太多的try catch
exception的处理基本都是try catch, 然后基于当时的想法决定是否抛出去。当我重新debug的时候,我不知道这个位置抛出去了对上一级是否有影响,不抛出去又会怎么样。
4.肆无忌惮的重构
遇到大块的代码就提取出来,这是最简单的重构。然而,当你debug从一个方法进入另一个方法再进入另一个方法,回头又跳回来,绝对懵逼。
重构的时候一定要在该方法领域内完整的阐述功能,而不要为了重构而重构,结果语义不完整,代码很分散。
5.处理json数据
项目大了之后,服务分拆成各种微服务。于是,各种调用webservice. webservice返回xml或者json。返回xml的烧了,暂且不提。返回json的,我们明明有jackson/gson
等各种json序列化工具,只要建立好model,直接映射过来就好。甚至还有JsonInclude,JsonPropertyIgnore等条件配置。而偏偏很多接口使用一个JsonObject来接收response。然后来一个map方法,调用JsonObject的各个属性的来获取各个值,再手动丢进一个model里。
到这里,项目中使用org.codehaus.jettison.json
来处理json数据,这个框架有个问题,JsonObject.get(key)的时候,如果key不存在,则不是返回null,而是抛出一个exception。我最近修改了两个bug都是因为response中没有这个key而抛出的异常。而response之所以没有这个key是因为webservice那边处理返回结果model不一定。正确的则返回这样,失败了则返回其他字段。而client的这端,没有预料到失败的结果映射,或者说以不变应万变,用exception来反映失败。
因此,webservice一定要定义好返回的model,失败了,不要一下是warning,一下是message。这样也可以,但要有文档说明你们返回的结果是什么model,client好做映射。client这边最好还是不要手动映射了,妈的出错了debug也很烦。client可以封装多个model,比如正常的model,失败的model。先序列化为正常的,序列化失败则序列化为失败的model。
如何优化coding的更多相关文章
- RSA算法优化
RSA算法优化 大数乘法 模乗优化 剩余定理(孙子定理) RSA加解密 python的RSA计算优化 #-*- coding: utf-8 -*- ''' /********************* ...
- Python2--Pytest_html测试报告优化(解决中文输出问题)
1.报告的输出: pytest.main(["-s","Auto_test.py","--html=Result_test.html"]) ...
- Android内存优化总结【整理】
http://blog.csdn.net/tiantangrenjian/article/details/39182293 [前段时间接到任务着手进行app的内存优化,从各种各样的渠道搜索相关资料,最 ...
- 基于 CODING 轻松搞定持续集成
点击观看视频教程 带你一步一步搞定 CODING 持续集成 持续集成加速软件交付 持续集成这个概念是由 Grady Booch 在 1991 年首次提出,随后成为了 DevOps 的核心实践之一.持续 ...
- pygame事件之——控制物体(飞机)的移动
近来想用pygame做做游戏,在 xishui 大神的目光博客中学了学这东西,就上一段自己写的飞机大战的代码,主要是对键盘控制飞机的移动做了相关的优化 # -*- coding: utf-8 -*- ...
- Python_oldboy_自动化运维之路_线程,进程,协程(十一)
本节内容: 线程 进程 协程 IO多路复用 自定义异步非阻塞的框架 线程和进程的介绍: 举个例子,拿甄嬛传举列线程和进程的关系: 总结:1.工作最小单元是线程,进程说白了就是提供资源的 2.一个应用程 ...
- Python_oldboy_自动化运维之路_socket编程(十)
链接:http://www.cnblogs.com/linhaifeng/articles/6129246.html 1.osi七层 引子: 须知一个完整的计算机系统是由硬件.操作系统.应用软件三者组 ...
- 'utf-8-sig api_res = r.data.decode('utf-8') json_ = json.loads(api_res)
东莞市 东莞城市标志 东莞城市标志 1985年,广东省东莞县经国务院批准列为珠江三角洲经济开发区,同年9月撤消东莞县,建立(县级)东莞市,1988年1月升格为地级市.东莞市是全国五个不设市辖区的地级市 ...
- Mac App 破解之路八 病毒程序分析
本人使用MacBooster 7 扫出了几个未知程序. JMJ56 这个程序. 在finder中打开发现是一个shell脚本 调用了python 9NKb0 就是python脚本使用. 只不过是 ...
随机推荐
- JavaScript function函数种类
本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通函数:介绍普通函数的特性:同名覆盖.arguments对象.默认返回值等. 2. 匿名函数:介绍匿名函数的特性:变量匿名函数.无名称匿名函数. ...
- JavaScript Array对象
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
- 在 SAE 上部署 ThinkPHP 5.0 RC4
缘起 SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去.一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库.不过,这样就失去了与上游 ...
- jQuery学习之路(2)-DOM操作
▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...
- 如何利用ansible callback插件对执行结果进行解析
最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...
- [转载]一个标准java程序员的进阶过程
第一阶段:Java程序员 技术名称 内 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...
- Eclipse出现"Running Android Lint has encountered a problem"解决方案
安装eclipse for android 时候的错误记录,转载自:http://blog.csdn.net/chenyufeng1991/article/details/47442555 (1)打开 ...
- ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)
ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...
- ViewController respondsToSelector 错误的解决方法
原因解析:(来自别人博客分析)某个公共类或系统提供的控件,存在delegate方法,当创建此公共控件的容器类已经销毁,而这个控件对应的服务是在其它run loop中进行的,控件销毁或者需要进行状态通知 ...
- centos6和centos7防火墙的关闭
CentOS6.5查看防火墙的状态: [zh@localhost ~]$service iptable status 显示结果: [zh@localhost ~]$service iptable st ...