·写在最前
在上周,李巍老师带着我们在课堂上进行了结对编程,我会先谈谈我的感受,后面我会对我这一周编写的代码进行一个总结,最后对这周做一个小小的规划。
·关于结对编程
何谓结对编程?
---"结对编程技术是指两位程序员坐在同一工作台前开发软件。" 摘自百度百科
这样有什么好处呢?
---“与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。” 摘自百度百科
在我的思维习惯里,一直都觉得编程是需要时时刻刻保持清醒的头脑,长时间里花费大量脑力去完成的。所以我一直都习惯于一个人,在很安静的状态下编写代码(PS.尝试过一边听歌,一边编写代码,效果很不好)。在身边有个人看着你编写,有种什么样的感觉呢?首先,他是一直看着你一步一步的编写代码,他能很清楚的知道你编写的逻辑,对我而言,我觉得有以下几个好处:
1.在开始编写代码之前,你可以和他进行交流,比如自己的想法,自己的构思,你能把他讲懂,并能得到他的支持,相信你的解决方案是非常prefect的,但是如果中间会有些许的纰漏或者遗漏,他也能一下就看出来,并提出他的想法,感觉就像出门打仗,带着一个军师为你出谋划策。
2.在以往编写代码时,自己会犯一些很低级的错误,因为很低级,自己的心里又在想着其他的事情,所以不经意间自己就会掉进陷阱里面去。比如在if语句里,少了一个取反操作,这下好了,运行发现跟自己想的不一样,倒回来一步一步的去找,最后找到了,不禁发出一声“我X,我怎么这么蠢”。但是有一个人在看着你敲,你完全不会有这样的担忧,就像带着一个能进行复杂逻辑判断并报错的编译器。
3.想想,当一个程序猿旁边坐着一个程序媛,是不是更有动力呢?哈哈,开玩笑。
·关于编程
上个星期自己尝试着写了写一个微小的服务器,大概也有700-800行的样子,发现了很多问题,下面进行一些总结,希望自己在以后的编程中能注意这些问题:
1.过度依赖IDE。IDE帮我们做了太多的事情,管理代码,生成代码,各种快捷键,我自己也乐在其中,导致忽视了很多重要的东西。比如生成Servlet,而在生成的时候,我们知不知道IDE到底帮我们做了什么呢?所以希望自己以后先减少对IDE的依赖,尽量都自己去配置一些基础的东西,等自己熟练了之后,再使用IDE里的各种酷炫的东西也不迟。
2.代码可维护性,可扩展性和可阅读性还是太低,尽管自己时时刻刻提醒自己注意注意,但是无奈编写的太过匆忙,结果还是不尽如人意,准备在这周对代码进行重构。下面贴出一段自己编写的代码进行分析:
/** * * @Description 解析HandBook.xml * @author Han * @param moudleIndex * @return */ public static List<Module> getModuleList(String moudleIndex) { Element _rootElement = init(); moduleList = new ArrayList<Module>(); Element _moduleList = _rootElement.element("moduleList"); Iterator<Element> it = _moduleList.elementIterator(); // 遍历ModuleList节点 while (it.hasNext()) { Module _module = new Module(); List<Function> _functionList = new ArrayList<Function>(); Element _moduleEle = (Element) it.next(); _module.setId(_moduleEle.attribute("id").getText()); _module.setName(_moduleEle.attribute("name").getText()); if (_moduleEle.attribute("id").getText().equals(moudleIndex)) { // 遍历Module节点 for (@SuppressWarnings("rawtypes") Iterator it1 = _moduleEle.elementIterator(); it1.hasNext();) { Function _function = new Function(); Element _functionEle = (Element) it1.next(); _function.setId(_functionEle.attribute("id").getText()); _function.setFunctionName(_functionEle.attribute("name") .getText()); _function.setUrl(_functionEle.element("url").getText()); List<Para> _requestParaList = new ArrayList<Para>(); List<Para> _responceParaList = new ArrayList<Para>(); Element _requestParaEle = _functionEle .element("requestPara"); Element _responseParaEle = _functionEle .element("responsePara"); Iterator<Element> it2 = _requestParaEle.elementIterator(); // 遍历requestPara while (it2.hasNext()) { Element _ParaEle = (Element) it2.next(); Para _requestPara = new Para(); _requestPara.setParaName(_ParaEle.attribute("name") .getText()); _requestPara.setParaInfo(_ParaEle.getText()); _requestParaList.add(_requestPara); } Iterator<Element> it3 = _responseParaEle.elementIterator(); while (it3.hasNext()) { Element _ParaEle = (Element) it3.next(); Para _responcePara = new Para(); _responcePara.setParaName(_ParaEle.attribute("name") .getText()); _responcePara.setParaInfo(_ParaEle.getText()); _responceParaList.add(_responcePara); } _function.setRequestPara(_requestParaList); _function.setResponcePara(_responceParaList); _functionList.add(_function); } _module.setFunctionList(_functionList); } moduleList.add(_module); } return moduleList; }
这是一段解析XML文件的方法,现在再看,我很快就发现了很多问题。大概问题如下:
1.代码注释太少,还好我是才写完这个方法,我可能还看得懂,那一年之后呢?或者别人来看呢?
2.冗余代码太多,明显很多都可以提取出来成为一个方法。
3.既然我写的是一个工具类(Util),也就是说这个方法很有可能之后会再用到,那么我是不是写得太死了?仅仅是针对这个XML写的方法,还能叫Util吗?可不可以修改一下,那它能通用于大多数的XML,利用反射?下来可以修改。我相信一定有写好的Jar包,但是我还是希望能多写些自己写的工具,这样也许自己能用着更顺手点?
在这周我会把这个方法重构,然后再贴出来。
·总结
“路漫漫其修远兮,吾将上下而求索”。虽然艰辛,却不退缩。