关于编程的那点事

·写在最前

    在上周,李巍老师带着我们在课堂上进行了结对编程,我会先谈谈我的感受,后面我会对我这一周编写的代码进行一个总结,最后对这周做一个小小的规划。

·关于结对编程

    何谓结对编程?

                      ---"结对编程技术是指两位程序员坐在同一工作台前开发软件。"   摘自百度百科

      这样有什么好处呢?

                                                                ---“与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。”  摘自百度百科

     

      在我的思维习惯里,一直都觉得编程是需要时时刻刻保持清醒的头脑,长时间里花费大量脑力去完成的。所以我一直都习惯于一个人,在很安静的状态下编写代码(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包,但是我还是希望能多写些自己写的工具,这样也许自己能用着更顺手点?

      

          在这周我会把这个方法重构,然后再贴出来。

·总结

         “路漫漫其修远兮,吾将上下而求索”。虽然艰辛,却不退缩。

原文地址:https://www.cnblogs.com/a294098789/p/5305958.html