首页 > 代码库 > 关于重构(四)--代码的坏味道
关于重构(四)--代码的坏味道
代码的坏味道主要有:
- Duplicated Code---(重复的代码):如果你在两个以上的地点看到相同的程序结构,那可以:设法将它们合二为一,程序会变得更好。
- Long Method ------(过长函数):View Code
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 else128 {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 }
可以修改一下
View Code1 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种坏味道(可以看一下代码坏味道特别篇---过长的参数列)
- Large Class -------(过大的类):
- Long Parameter List -----(过长参数列)http://www.cnblogs.com/ITyueguangyang/p/4193744.html
- Divergent Change ---(发散式变化)
- Shotgun Surgery ---(散弹式修改)-
- Feature Envy -----(依恋情结)
- Data Clumps------(数据泥团)
- Primitive Obsession(基本类型偏执)
- Swith Statements ( swith 惊悚现身------个人以为这种情况出现的比较少)
- Parallel inheritance Hierarchies (平行继承体系)
- Speculative Generality(夸夸其谈未来性)
- Temporary Field (令人迷惑的暂时字段)
- Message Chains(过度耦合的消息链)
- Inappropriate Intimacy (过分狎昵的关系)
- Alternative Classes With Different interfaces (异曲同工的类)
- Incomplete library Class (不完美的类库)
- Data Class(纯粹的数据库类)
- Refused Bequest (被拒绝的遗赠)
- Comments(过多的注释)
关于重构(四)--代码的坏味道
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。