关于重构(四)--代码的坏味道

代码的坏味道主要有:

  1. Duplicated Code---(重复的代码):如果你在两个以上的地点看到相同的程序结构,那可以:设法将它们合二为一,程序会变得更好。
  2. Long Method ------(过长函数):

      1 private void bindSaleInfo(string swhere)
      2     {
      3         ArrayList proList = getProductInfo(swhere);
      4         string colorStr = "";
      5         StringBuilder rowHtml = new StringBuilder();// 行代码
      6         //repeaer头部信息
      7        // rowHtml.Append("<table border=‘0‘ width=‘98%‘ cellspacing=‘1‘ cellpadding=‘0‘ bgcolor=‘#6DA9DE‘>");
      8         rowHtml.Append("<asp:Repeater ID=‘Repeater1‘ runat=‘server‘>");
      9         rowHtml.Append("<HeaderTemplate><tr bgcolor=‘#FFFFFF‘>");
     10
     11         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>序号</b></td>");//0
     12         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>日期</b></td>");//1
     13         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>大区</b></td>");//3
     14         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>业务员</b></td>");//2
     15         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>经销商</b></td>");//4
     16         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品编号</b></td>");//5
     17         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品名称</b></td>");//6
     18         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品规格</b></td>");//7
     19         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>到货地点</b></td>");//8
     20         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货数量</b></td>");//9
     21         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货单价</b></td>");//10
     22         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货金额</b></td></tr></HeaderTemplate>");//14
     23         string str1 = "", str2 = "", str3 = "", str4 = "", str5 = "", str6 = "", str7 = "", str8 = "";
     24         string str9 = "", str10 = "", str11 = "";
     25
     26         decimal tcount1 = 0, tcount3 = 0;
     27         //按日期统计每一条
     28         for (int i = 0; i < proList.Count; i++)
     29         {
     30             str1 = proList[i].ToString().Split(‘,‘)[0];
     31             str2 = proList[i].ToString().Split(‘,‘)[1];
     32             str3 = proList[i].ToString().Split(‘,‘)[2];
     33             str4 = proList[i].ToString().Split(‘,‘)[3];
     34             str5 = proList[i].ToString().Split(‘,‘)[4];
     35             str6 = proList[i].ToString().Split(‘,‘)[5];
     36             str7 = proList[i].ToString().Split(‘,‘)[6];
     37             str8 = proList[i].ToString().Split(‘,‘)[7];
     38             str9 = proList[i].ToString().Split(‘,‘)[8];
     39             str10 = proList[i].ToString().Split(‘,‘)[9];
     40             str11 = proList[i].ToString().Split(‘,‘)[10];
     41
     42
     43             if (!str9.Equals(""))
     44             {
     45                 tcount1 += Convert.ToDecimal(str9);
     46             }
     47
     48             if (!str11.Equals(""))
     49             {
     50                 tcount3 += Convert.ToDecimal(str11);
     51             }
     52
     53
     54             if (i % 2 != 0)
     55             {
     56                 colorStr = "#FFFFFF";// 奇数行
     57                 rowHtml.Append("<ItemTemplate>");
     58                 //序号
     59                 rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>"
     60                   + (i + 1) + "</td>");
     61
     62                 //日期
     63                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str1 + "</td>");
     64
     65                 //区域
     66                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str3 + "</td>");
     67                 //业务员
     68                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str2 + "</td>");
     69                 //经销商
     70                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str4 + "</td>");
     71                 //产品编号
     72                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str5 + "</td>");
     73                 //产品名称
     74                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str6 + "</td>");
     75                 //产品规格
     76                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str7 + "</td>");
     77                 //到货地点
     78                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str8 + "</td>");
     79                 //发货数量
     80                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str9 + "</td>");
     81                 //发货单价
     82                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str10 + "</td>");
     83                 //发货金额
     84                 rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str11 + "</td>");
     85
     86                 rowHtml.Append("</tr></ItemTemplate>");
     87             }
     88             else
     89             {
     90                colorStr = "#DFF4FF";// 偶数行
     91                rowHtml.Append("<AlternatingItemTemplate>");
     92                //序号
     93                rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>"
     94                   + (i + 1) + "</td>");
     95
     96                //日期
     97                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str1 + "</td>");
     98
     99                //区域
    100                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str3 + "</td>");
    101                //业务员
    102                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str2 + "</td>");
    103                //经销商
    104                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str4 + "</td>");
    105                //产品编号
    106                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str5 + "</td>");
    107                //产品名称
    108                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str6 + "</td>");
    109                //产品规格
    110                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str7 + "</td>");
    111                //到货地点
    112                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str8 + "</td>");
    113                //发货数量
    114                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str9 + "</td>");
    115                //发货单价
    116                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str10 + "</td>");
    117                //发货金额
    118                rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str11 + "</td>");
    119                rowHtml.Append("</tr></AlternatingItemTemplate>");
    120             }
    121         }
    122
    123         if (proList.Count % 2 != 0)
    124         {
    125             colorStr = "#FFFFFF";// 奇数行
    126         }
    127         else
    128         {
    129             colorStr = "#DFF4FF";// 偶数行
    130         }
    131         rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>汇总</td>");
    132        //日期
    133        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    134        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    135        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    136        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    137        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    138        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    139        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    140        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
    141        //发货数量
    142        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + tcount1.ToString() + "</td>");
    143        //发货单价
    144        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘></td>");
    145        //发货金额
    146        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + tcount3.ToString() + "</td>");
    147        rowHtml.Append("</tr>");
    148         rowHtml.Append("</asp:Repeater>");
    149         reportContent.Text = rowHtml.ToString();
    150     }

    可以修改一下

      1   private void bindSaleInfo(string swhere)
      2     {
      3         ArrayList proList = getProductInfo(swhere);
      4         string colorStr = "";
      5         StringBuilder rowHtml = new StringBuilder();// 行代码
      6         //repeaer头部信息
      7        // rowHtml.Append("<table border=‘0‘ width=‘98%‘ cellspacing=‘1‘ cellpadding=‘0‘ bgcolor=‘#6DA9DE‘>");
      8         rowHtml.Append("<asp:Repeater ID=‘Repeater1‘ runat=‘server‘>");
      9         rowHtml.Append("<HeaderTemplate><tr bgcolor=‘#FFFFFF‘>");
     10
     11         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>序号</b></td>");//0
     12         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>日期</b></td>");//1
     13         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>大区</b></td>");//3
     14         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>业务员</b></td>");//2
     15         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>经销商</b></td>");//4
     16         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品编号</b></td>");//5
     17         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品名称</b></td>");//6
     18         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>产品规格</b></td>");//7
     19         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>到货地点</b></td>");//8
     20         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货数量</b></td>");//9
     21         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货单价</b></td>");//10
     22         rowHtml.Append("<td height=‘30‘ align=‘center‘ style=‘word-break: break-all;‘><b>发货金额</b></td></tr></HeaderTemplate>");//14
     23         string str1 = "", str2 = "", str3 = "", str4 = "", str5 = "", str6 = "", str7 = "", str8 = "";
     24         string str9 = "", str10 = "", str11 = "";
     25
     26         decimal tcount1 = 0, tcount3 = 0;
     27         //按日期统计每一条
     28         for (int i = 0; i < proList.Count; i++)
     29         {
     30             str1 = proList[i].ToString().Split(‘,‘)[0];
     31             str2 = proList[i].ToString().Split(‘,‘)[1];
     32             str3 = proList[i].ToString().Split(‘,‘)[2];
     33             str4 = proList[i].ToString().Split(‘,‘)[3];
     34             str5 = proList[i].ToString().Split(‘,‘)[4];
     35             str6 = proList[i].ToString().Split(‘,‘)[5];
     36             str7 = proList[i].ToString().Split(‘,‘)[6];
     37             str8 = proList[i].ToString().Split(‘,‘)[7];
     38             str9 = proList[i].ToString().Split(‘,‘)[8];
     39             str10 = proList[i].ToString().Split(‘,‘)[9];
     40             str11 = proList[i].ToString().Split(‘,‘)[10];
     41
     42
     43             if (!str9.Equals(""))
     44             {
     45                 tcount1 += Convert.ToDecimal(str9);
     46             }
     47
     48             if (!str11.Equals(""))
     49             {
     50                 tcount3 += Convert.ToDecimal(str11);
     51             }
     52
     53
     54             if (i % 2 != 0)
     55             {
     56                 colorStr = "#FFFFFF";// 奇数行
     57                 rowHtml.Append("<ItemTemplate>");
     58                 //序号
     59                 rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>"
     60                   + (i + 1) + "</td>");
     61
     62                 SetStyle(rowHtml, str1, str2, str3, str4, str5, str6, str7, str8, str9, str10, str11);
     63                 rowHtml.Append("</tr></ItemTemplate>");
     64             }
     65             else
     66             {
     67                colorStr = "#DFF4FF";// 偶数行
     68                rowHtml.Append("<AlternatingItemTemplate>");
     69                //序号
     70                rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>"
     71                   + (i + 1) + "</td>");
     72
     73                SetStyle(rowHtml, str1, str2, str3, str4, str5, str6, str7, str8, str9, str10, str11);
     74                rowHtml.Append("</tr></AlternatingItemTemplate>");
     75             }
     76         }
     77
     78         if (proList.Count % 2 != 0)
     79         {
     80             colorStr = "#FFFFFF";// 奇数行
     81         }
     82         else
     83         {
     84             colorStr = "#DFF4FF";// 偶数行
     85         }
     86         rowHtml.Append("<tr title=‘双击显示详细‘  bgcolor=‘" + colorStr + "‘ ><td height=‘25‘ align=‘center‘ width=‘4%‘>汇总</td>");
     87        //日期
     88        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     89        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     90        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     91        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     92        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     93        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     94        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     95        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘> </td>");
     96        //发货数量
     97        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + tcount1.ToString() + "</td>");
     98        //发货单价
     99        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘></td>");
    100        //发货金额
    101        rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + tcount3.ToString() + "</td>");
    102        rowHtml.Append("</tr>");
    103         rowHtml.Append("</asp:Repeater>");
    104         reportContent.Text = rowHtml.ToString();
    105     }
    106
    107     private static void SetStyle(StringBuilder rowHtml, string str1, string str2, string str3, string str4, string str5, string str6, string str7, string str8, string str9, string str10, string str11)
    108     {
    109         //日期
    110         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str1 + "</td>");
    111
    112         //区域
    113         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str3 + "</td>");
    114         //业务员
    115         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str2 + "</td>");
    116         //经销商
    117         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str4 + "</td>");
    118         //产品编号
    119         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str5 + "</td>");
    120         //产品名称
    121         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str6 + "</td>");
    122         //产品规格
    123         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str7 + "</td>");
    124         //到货地点
    125         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str8 + "</td>");
    126         //发货数量
    127         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str9 + "</td>");
    128         //发货单价
    129         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str10 + "</td>");
    130         //发货金额
    131         rowHtml.Append("<td height=‘25‘ align=‘center‘ style=‘word-break: break-all;‘>" + str11 + "</td>");
    132
    133     }

    当然我只是随便弄了一下,比如这样下会出现第4种坏味道(可以看一下代码坏味道特别篇---过长的参数列)

  3. Large Class -------(过大的类):
  4. Long Parameter List -----(过长参数列)http://www.cnblogs.com/ITyueguangyang/p/4193744.html
  5. Divergent Change ---(发散式变化)
  6. Shotgun Surgery ---(散弹式修改)-
  7. Feature Envy -----(依恋情结)
  8. Data Clumps------(数据泥团)
  9. Primitive Obsession(基本类型偏执)
  10. Swith Statements ( swith 惊悚现身------个人以为这种情况出现的比较少)
  11. Parallel inheritance Hierarchies (平行继承体系)
  12. Speculative Generality(夸夸其谈未来性)
  13. Temporary Field (令人迷惑的暂时字段)
  14. Message Chains(过度耦合的消息链)
  15. Inappropriate Intimacy (过分狎昵的关系)
  16. Alternative Classes With Different interfaces (异曲同工的类)
  17. Incomplete library Class (不完美的类库)
  18. Data Class(纯粹的数据库类)
  19. Refused Bequest (被拒绝的遗赠)
  20. Comments(过多的注释)
时间: 2024-12-15 08:54:19

关于重构(四)--代码的坏味道的相关文章

重构笔记——代码的坏味道(上)

在重构入门篇中,简单地介绍了重构的定义.为何重构.何时重构等.我想对于重构是如何运作的,你已经有了较好的理解了.但是对于代码中的坏味道,你可能 知道的并不多.坏味道可能是无形中产生的,也可能是开发人员偷懒造成的,还可能是其它某些因素导致的.不管怎么样,代码中的坏味道对程序没有半点好处,它 会促使程序腐烂,甚至变质.对于开发人员,真的是很有必要对这些坏味道进行了解和熟悉,理解它们产生的场景.针对当前程序,发现坏味道,对代码进行重构, 以消除坏味道,提高代码质量,提高自己水平. 下面让我们一起来熟悉

学习重构(1)-代码的坏味道

前言:最近做一个特性,参照原有逻辑增加某个功能,老代码本身存在两套相似的流程,再添加上一套流程后,发现代码的重复度及其的高,基本可以理解为一套框架流程复制出来3个类,给3个功能使用.我对比了每个类的代码后,发现代码重复度基本在50%以上,这种代码真是越写越烂的感觉.于是费力的做了一下重构,搞了个父类出来,抽取了大部分公共函数,整体代码看着就舒服多了.草草做了下重构后,突然觉得自己并不系统的知道要如何重构,只是知道些皮毛,又自我感觉良好的样子.翻出很久都没电的kindle,本想买本重构的书看,突然

代码的坏味道之二——译自《重构》

巨型类 当一个类尝试做的太多,它常常展示出过多的实例变量.当一个类有太多实例变量,重复代码的出现就不远了. 你可以提取类来打包一部分变量.选择在部件中有意义的变量放在一起.例如,“存款总量”和“存款货币”很可能在同一部件中.更宽泛的说,在一个类中变量的某个子集共同的前缀和后缀预示着组成同一个部件的机会.如果这个部件有成为子类的意义,你会发现提取子类往往更容易. 有时一个类不会一直使用它全部的实例变量.如果如此,你可能可以提取类或者提取子类若干次. 相比于一个类有太多实例变量,一个类有太多代码是重

代码的坏味道之三——译自《重构》

散弹式修改(Shotgun Surgery) 散弹式修改和发散式变化类似,但却相反.每当你做一种修改你却必须对很多不同的类做很多小的变化,你面临的就是散弹式修改.当变化到处都是时,有的变化就不好找到了,这样很容易漏掉重要的更改. 这种情况下你要使用移动方法(Move Method)和移动字段(Move Field)来把所有的变化放到一个类里.如果没有现成的类合适,就创建一个类.通常你会用到内联化类(Inline Class)把一系列行为放到一起.你会有一点发散式变化的问题,但你可以轻松处理它.

重构摘要3_代码的坏味道

如果尿布臭了,就换掉它. 1.Duplicated Code 重复代码 Extract Method Pull Up Method Form Template Method --> Template Method 模式 Substitute Algorithm --> 函数算法替代 2.Long Method 过长的函数 "间接层"所带来的全部利益--解释能力.共享能力.选择能力--都是有小函数支持的. 真正关键在于一个好名字. 每当感觉需要以注释来说明点什么的时候,我们就

代码的坏味道之五 ——译自《重构》

夸夸其谈未来性Speculative Generality Brian Foote 为一个我们都很敏感的味道建议的名字.你会遇到它当有人说“哦,我认为我们某一天会需要能力去做那一类的事”然后这样一来希望得到各种钓钩和特别的例子去处理并不需要的事情.结果往往是更难懂也难维护.如果所有的这些机制被用上,那这样做还是值得的.如果不是这样,也就不值得.这个机制就是这样产生的,所以处理掉它. 如果你有抽象类并没有做很多事,用Collapse Hierarchy.不必要的委托可以用Inline Class去

代码的坏味道之四 ——译自《重构》

基本类型偏执Primitive Obsession 大多数编程环境有两种类型的数据.记录类型允许你把数据结构化成有意义的集合.基本类型是你建设用的砖块.记录类型总是会产生一定量的额外开销.这可能是数据库中的表,或者被很尴尬的创建当你希望他们只为一或两件东西存在. 关于对象一个很有意义的东西是,他们模糊甚至打破了基本类型和大型类之间的界线.你可以很轻松的写小的无法和语言中内建类型相区别的类.Java对数字有基本类型,但字符和日期这些在其他环境也是基本类型的,在Java里是类. 新接触对象的人通常不

代码的坏味道之一——译自《重构》

重复代码 臭味集合里面排第一的就是重复代码了.如果你在不止一处发现了同样结构的代码,你可以确定如果你找到一种方法来统一他们的话,你的程序将会改善. 最简单的重复代码问题是当你在同一个类中有两个方法有相同的表达时出现的.那么你需要做的所有步骤只是提取方法然后在两处调用代码. 另一种常见的重复问题是当你在两个兄弟类中有相同的表达.你可以通过在两个类中提取方法然后拉升方法(Pull up Method)来消灭重复.如果这段代码相似但不相同,你需要通过提取方法来分离相同和不同的部分.你可能会发现你可以使

实例说明什么是代码的坏味道,如何重构

所谓优雅的代码,或者恶心的代码,很多时候是见仁见智的.也同时是看个人喜好或者习惯的.当经验不足,看的和写的代码还不够多的时候,我们可能会追捧某个大神或者奉某本经典为圭臬.然后跟学校的学弟们说,有空多看看<重构>和<设计模式>吧. 在我看来,优雅的代码并不是说这个代码写的有多神,多么让人惊叹.能够让人清晰的去阅读去理解就是好的代码.代码并不是艺术,更多的是严谨的表达出自己的思路.在这个过程中代码的易读性是第一位的,然后是正确性,然后是运行效率. 让人感到恼火的代码也并一定是写的多么凌