最近做了个android native应用。因为没做过,所以第一张卡果断跟产品要了8个天的时间,8个点吧。主要是因为前期要学习些知识。然后用6.5个点给做完了所有的。下面一部是要做重构了。做敏捷的,不能容忍那么长的代码啊。看见以后就恶心,不过重构重构着出现了bug。
具体是这样的,有一块代码是做同步。上传数据,将服务器返回来的数据进行处理。因为在其他的地方也要做同步,所以考虑了一下,直接改为三步。第一步,构建StirngEntity ;第二步,联网,上传数据,接受数据;第三部,处理数据。都知道联网是很耗时间的,要单起一个线程。重构的时候我将线程放在了第二部里面,觉得这里会很耗时间。其他地方只不过提供接口直接调用就好了。然后测试,在第3步出现了,httpResponse 空指针异常,不清楚是什么情况,就加了个判断 if(!httpResponse ==null)(handle(httpResponse););这空指针异常没有了,在getEnitity()的时候却出现了 IllegalStateException: Content has been consumed 异常,查了一下资料原来是httpEntity只能被用一次,感觉处在了刚才那个判断上。可是想来一下,为什么会出现一个空指针异常呢?而没重构的时候没事?
这时候想到了线程,因为主线程是不等待新起的线程,也就是打破了主线程的顺序执行,然后在新起的线程里面,返回的httpResponse是默认值null;所以就会出现了空指针异常。找到了根本原因。ok,这时候就有了针对性,把这个三步用一个线程来操作,这样子,3步就是一个线性的执行了。
啰嗦一下,说下个人心得吧:
1出现了问题,尤其是这种前一秒正确后一秒错误的情况,要注意分析。我看到有的程序员看到不正确就删掉,认为不正确。是,我承认不正确,可是你却没有分析为什么不正确。注意对比两个的不同之处。然后大部分就能得到处问题的原因了。如果你这样总是删除删除的话,不会有一些自己的思维。只能是一个底层的coder。
2问题的解决,不能只是为了改问题而改问题。分析是必须的,要找到出问题的根本原因,出这个原因是哪一部分负责,要去改那一部分。从根本上解决问题,就像出去痛片,治标不治本。到时候,受罪的是自己。
3重构,本为新手,没有什么资质去谈这个话题。但是还是想说说。重构的目的很多,这里做的重构,主要是去除重复,抽出模块,让别人容易看懂。以前写javascript的时候,直接想好怎么写。重构少,但是这次不同,没有接触过,直接上的,所以代码开始写的很差劲,不过还好,重构就会体现了它的作用。推荐本书吧,叫做《重构:改善既有代码的设计》相当不错的一本书,还有一本叫做《clean code》 。有空可以看看。