【代码重构】此贴长期有效

子夜__ 2012-09-06 09:25:06
加精
有没有那么一瞬间,你的代码写的让自己和兄弟们都感觉到很凌乱?
有没有那么一瞬间,有段代码就放在你眼前,你却读不懂它?
有没有那么一瞬间,你要花很长很长时间去读别人写的代码?
有没有那么一瞬间,你的参数过长却不知道怎么办?
...


现在,可以把你的代码勇敢的贴出来,让那些有代码洁癖的程序员们帮您重构,并和你一起讨论您的程序中所存在的问题。



代码要求:
1、有简短的说明。
2、贴代码前最好自己先斟酌一下,不加思索的贴出来会被和谐。
3、代码最好不要超过500行。(注意不要哗哗一顿贴,几千行那种!)
4、贴出来要注意代码高亮,目前只支持C#代码。


遗漏的以后补充。
...全文
9093 134 打赏 收藏 转发到动态 举报
写回复
用AI写文章
134 条回复
切换为时间正序
请发表友善的回复…
发表回复
那一年我们21 2013-11-04
  • 打赏
  • 举报
回复
参数长可以放到一个数组里面 我就是这么做的
youwillgo_110 2013-01-05
  • 打赏
  • 举报
回复
引用 86 楼 lzxue1989 的回复:
C# code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 StringBuilder InsertSql = new StringBuilder(); ……
if ((this.txtpun1.Text.Trim() != "") && (this.txtpun2.Text.Trim() != "")) //上午上班,打卡时间段 { InsertSql.Append(",'" + this.txtpun1.Text.Trim() + "-" + this.txtpun2.Text.Trim() + "'"); } else { InsertSql.Append(",null"); } 这样的代码应该能写到一个函数中的
youwillgo_110 2013-01-05
  • 打赏
  • 举报
回复
引用 74 楼 cy411129362 的回复:
刚好最近有一点问题,也是关于代码的,大致问题是这样,我需要在一个方法中顺序执行3句代码,但因为跟硬件有关,所以有时候会抛出异常,所以不得不处理一下(硬件的异常程序无法处理,我的目的只是让程序不要挂掉) 本来是很简单的: C# code?12345......A;B;C;...... 但是最后被我整成了这样: C# code?12345678910111213141……
能否 try { A; B; C; } catch(){} catch(){} 另外下面的代码应该能写到一个函数中的 errMessage += "Message:" + e1.Message + "\r\n"; errMessage += "Stack:" + e1.StackTrace + "\r\n"; Thread.Sleep(500); k++; if (k == 1) { goto lbl1; } else { k = 0; goto lbl2; }
youwillgo_110 2013-01-05
  • 打赏
  • 举报
回复
[quote=引用 87 楼 duwufeng 的回复:] 总体感觉: 1、命名上可以再规范一下 2、变量太多,而且多是位传递,最好用位结构体,这样比较合理。 3、宏定义,你放在了函数里边,我一般没这么写过,只见linux某些代码好像这么写过。但是如果是我,我 还是会写在外面。呵呵! 补充: 结构体如果能重用,就搞个结构体 宏定义如果能重用就放外面,否则这样就最好 好多数字,例如 ‘5’ 等最好用const定义,不然不知道啥意思
卡卡Gemini 2012-12-20
  • 打赏
  • 举报
回复
引用 125 楼 sp1234 的回复:
引用 113 楼 a283489754 的回复:丝毫不理解一个两个函数有什么好重构的,就算有效率问题也差异不大,重构应该是在好多类或者文件中包含了冗余模块或者设计不当才发生的吧。 如果包含冗余的代码,应该删除,而不是重构。 如果设计不当,那么应该改bug,绝对不可重构。此时最重要地是少改原来的代码,而以“极端简单的方法”来做修补。不该重构时千万不要耗费时间去重……
您这说的太理论了,根本不实际。设计不当就会产生bug么?不一定吧。丝毫不理解改bug和设计和重构有什么关系,完全是两码事吧,不想再说什么了。csdn的人越来越让我觉得这是一群代码都没有写过的人,却在这里天天谈着模式,重构什么的,反正是很无语。
纯属为了扯淡 2012-12-15
  • 打赏
  • 举报
回复
引用 86 楼 lzxue1989 的回复:
C# code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 StringBuilder InsertSql = new StringBuilder(); ……
这段代码比较无语,重写而不是重构。 1、首先数据操纵和界面访问都参合一块了 2、命名及其随意 3、字符串既然用了Append,怎么还那么多+号 4、sql不是这么拼的反正
  • 打赏
  • 举报
回复
引用 85 楼 gd920129 的回复:
当我发现重复代码的时候我便会不由自主的想到重构。。 但是手动重构一段代码会耗费不少时间。。 现在我之重构那些多次使用的代码 但看到可以重构但是没有重构的代码,心里面便是非常的不爽。。。 。。。难道是传说中的代码强迫症。。
这是很自然的,而且也非常正常。为了很多原因,特别是为了让菜鸟能够有信心,同时也为了少浪费时间,我们实际上假装对许多“不爽”视而不见。 编程不是目的。我们经常进入一种“浑浑噩噩”的状态,我们整天叫嚷着“我想要有洁癖”,结果整天争论在低级的东西上面,想不出好的设计创意和编程目标。如果我们把编程当作了目的,就成了套中人了。
  • 打赏
  • 举报
回复
如果一个人没有“玩过山车如履平地般地”能力,他怎敢经常重构呢? 许多人其实都希望活在“自己个人负责的代码”这个定式中,就好像契珂夫写的《套中人》里边那个不男不女的“别里科夫”似的,他们希望给自己的每一个部分都贴上标签声明,希望别人编程时都以他自己的能力水平为限度来进行详细注释。这样的做法实际上会走回形式上的“基于文档来开发”的老路上,而不会去基于测试来开发,像《重构》之类的著作对他们是只会拿片段来说事儿、没有可能深入地贯彻的。
  • 打赏
  • 举报
回复
引用 113 楼 a283489754 的回复:
丝毫不理解一个两个函数有什么好重构的,就算有效率问题也差异不大,重构应该是在好多类或者文件中包含了冗余模块或者设计不当才发生的吧。
如果包含冗余的代码,应该删除,而不是重构。 如果设计不当,那么应该改bug,绝对不可重构。此时最重要地是少改原来的代码,而以“极端简单的方法”来做修补。不该重构时千万不要耗费时间去重构。 其实可以随时随地地重构,因为重构只是一种“无关痛痒”的名词儿而已。 但是如果你看那些“大师”的关于《重构》的著作,首先是他有了高强度的测试驱动的技术,才敢谈大量重构。他们不遗余力地推荐重构,其实是有特别极端的条件为前提的。这就好像是不遗余力地推荐蹦极运动,前提是他懂得如何保护别人。 如果我们空谈重构,慢慢地我们反而容易陷入“只走形式”泥潭。实际上一个如锋利的“柳叶刀”般的好技术,他的深意绝对不在这个形式上,“过分技术化”就会步入泥潭。
Assassin_ 2012-12-13
  • 打赏
  • 举报
回复
本来有种贴的冲动 。 但是多看了两个回复 。。还是算了吧!!
Assassin_ 2012-12-13
  • 打赏
  • 举报
回复
引用 29 楼 SomethingJack 的回复:
引用 27 楼 的回复:引用 24 楼 的回复: public Object ParseXMLToInfo(XmlNode node) { LinkDropdownListInfo info = new LinkDropdownListInfo(); //..... return info; } 我很好奇返回类型为什么是Object 而不是L……
泛型会不会好些~
jess_lv 2012-12-11
  • 打赏
  • 举报
回复
写代码的时间少,抄人家的代码时间多,不过一般抄过来会稍改动下,那怕是调整下
yanguisuo 2012-11-28
  • 打赏
  • 举报
回复
先设计,再编码多谢注释,再重构。
brightmind 2012-11-09
  • 打赏
  • 举报
回复
太复杂的代码根本没办法贴出来。
喜欢送 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 的回复:]

代码不是重点,架构才是王道,代码写得再好,不如把设计模式运用自如了
[/Quote]

步行不是重点,跑步才是王道,步行的再好,还不如跑步好、、、是这个意思吧,大神
sunmoonstar2004 2012-10-17
  • 打赏
  • 举报
回复
C#和Java开发人员还是读读《重构-改善既有代码的设计》这本书吧!里面详细列举了各种重构的动机和做法,相当有实用性。
sunmoonstar2004 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 86 楼 的回复:]
C# code


StringBuilder InsertSql = new StringBuilder();

InsertSql.Append("insert into t_sched(schid,schname,bmid,dzid,pun1,pun2,pun3,pun4,pun5,pun6) values('" + this.txtid.Tex……
[/Quote]

使用了很多重复的代码,可以把它们提取到一个方法中去,再调用这个方法。

private void AppendText(StringBuilder InsertSql, string input1, stirng input2)
{
if (input1 != "") && (input2 != ""))
{
InsertSql.Append(",'" + input1 + "-" + input2 + "'");
}
else
{
InsertSql.Append(",null");
}
}
xiaokkhehe 2012-10-16
  • 打赏
  • 举报
回复
我大部分时间是 ctrl+C 然后CTRL+V
he473616897 2012-10-07
  • 打赏
  • 举报
回复
......没能全明白
patrickjiang 2012-10-04
  • 打赏
  • 举报
回复
额~~~~~~看着子夜大神的头像,读着子夜大神的文字,感觉红楼梦里学编程~~~~~~额~~~~~~
加载更多回复(96)

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧