随笔 - 181  文章 - 15  trackbacks - 0
<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

My Tech blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜

        以前看过一点这本书的英文版本,感觉相当不错,但是由于英文水平有限,总是感觉里面有些说法对我来说比较生涩,特别还有一些理论性的东西,如果只看英文,基本上是无从查起的.好在这本书有了中文版(也许早就有了,我可是才刚刚找到),高兴之余,细细品读,写写笔记,潦记于此.
        先看看书中有关重构的定义:
        重构的定义:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。本质上说,重构就是在代码写好之后改进它的设计。
        这个定义说得很清楚了,基本上不需要进行任何的说明。我们只要将它当作原则去遵照就好了。
        然后书中讲了:
        快速而随性(quick and dirty)的设计一个简单的程序并没有错。
        于是我就有这样的问题了:
        什么规模的程序才值得重构?
        然后书中给了我这样一个回答:
        如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便的那么做,那就先重构那个程序,使特性的添加比较容易进行,然后添加特性。
        重构之前要做这样一些准备:
        重构的第一步--为代码建立测试环境。
重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检查能力。
        下面是一些摘录:
        首先在代码中找出函数内的局部变量和参数。任何不会修改的变量都可以被当成参数传入新的函数,至于会被修改的变量就需要格外小心。如果只有一个变量会被修改,可以把它当作返回值。
在找出一个函数的逻辑泥潭并将之提练到另外一个函数中的时候,要格外注意返回值。如果你经常犯这样的错误,那么一定确保在修改前后函数的调用结果相一致。
        代码应该表现自己的目的,这一点非常重要。阅读代码的时候,我经常进行重构。这样,随着对程序的理解逐渐加深,我也就不断地把这些理解嵌入代码中,这么一来才不会遗忘我曾经理解的东西。
        几个重构的方法(下面的伪码是我自己写的):
        1、Extract Method (提取方法)
        2、appending assignment ,operator+=( 附添赋值动作)
        这两种重构方法结合的形式为:
        重构前:
        A=0;
        A++;
        if(expression)
          A++;
        重构后:
         A=0;
         A+=function1();
         TypeOfA function1()
         {
             if(expression)
               return 2;
             else
               return 1;
          }
         3、Replace Temp with Query(字面上用查询取代临时变量)
         利用所谓的query method来取代临时变量。由于class内的任何函数都可以取用(调用)所谓query methods,所以它能够促进比较干净的设计,而非冗长复杂的函数。
          Replace Temp with Query的伪码例子:
          A=0;
          while(expression)
          {
             A++;
           }
          return "The Result is "+A;
          上面A是一个临时变量.所以可以用一个querymethod来取代:
           TypeA function1()
          {
             A=0;
             while(expression)
             {
                A++;
              }
             return A;
           }
这样主程序可以这样写:
           return "The Result is "+function1();
继续摘抄:
重构可能会存在另外一个问题,就是性能。原本代码只执行一次循环,在重构以后可能要执行三次。如果循环中的语句耗时很多,就可能大大降低程序的性能。单单为了这个原因,许多程序员就不愿进行这个重构动作。但是请注意这里只是“可能”。除非进行评测,否则无法确定循环的执行时间,也无法知道这个循环是否经常使用以至于影响系统的整体性能。重构时程序人员不必担心这些,优化时才去担心它们,但那时候你已经处于一个比较有利的位置,有更多选择可以进行有效优化。
使用Form Template Method(字面上建立模板方法)可以进一步减少重复代码。这会在书后面的章节讲到。
posted on 2007-06-15 22:53 littlegai 阅读(345) 评论(0)  编辑 收藏 引用 所属分类: 我的读书笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理