开发(ASP.NET程序)把写代码写至最有面向对象味道
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了开发(ASP.NET程序)把写代码写至最有面向对象味道,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3591字,纯文字阅读大概需要6分钟。
内容图文
今天看了条博文,瞬间又勾起了对设计模式的兴趣。虽然掌握的不多,但看一个学一个总归是好的。一下是文章中的内容和整理。
首先看原始代码
1 public void show2(string day) 2 { 3string[] str = newstring[] { "09:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00" }; 4for (int i = 0; i < str.Length; i++) 5 { 6string sql1 = "select position from cwsz where day=‘" + day + "‘ and sjd=‘" + str[i] + "‘"; 7var dt1 = db.ExecuteQuery(sql1); 8if (dt1.Rows.Count > 0) 9 { 10if (dt1.Rows[0]["position"] != null) 11 { 12if (str[i] == "09:00") 13 { 14if (dt1.Rows[0]["position"].ToString() == "3") 15 dropnine.SelectedIndex = 1; 16elseif (dt1.Rows[0]["position"].ToString() == "4") 17 dropnine.SelectedIndex = 2; 18elseif (dt1.Rows[0]["position"].ToString() == "5") 19 dropnine.SelectedIndex = 3; 20else21 dropnine.SelectedIndex = 4; 2223 } 24if (str[i] == "10:00") 25 { 26if (dt1.Rows[0]["position"].ToString() == "3") 27 dropten.SelectedIndex = 1; 28elseif (dt1.Rows[0]["position"].ToString() == "4") 29 dropten.SelectedIndex = 2; 30elseif (dt1.Rows[0]["position"].ToString() == "5") 31 dropten.SelectedIndex = 3; 32else33 dropten.SelectedIndex = 4; 34 } 35if (str[i] == "11:00") 36 { 37if (dt1.Rows[0]["position"].ToString() == "3") 38 dropele.SelectedIndex = 1; 39elseif (dt1.Rows[0]["position"].ToString() == "4") 40 dropele.SelectedIndex = 2; 41elseif (dt1.Rows[0]["position"].ToString() == "5") 42 dropele.SelectedIndex = 3; 43else44 dropele.SelectedIndex = 4; 45 } 46if (str[i] == "12:00") 47 { 48if (dt1.Rows[0]["position"].ToString() == "3") 49 droptw.SelectedIndex = 1; 50elseif (dt1.Rows[0]["position"].ToString() == "4") 51 droptw.SelectedIndex = 2; 52elseif (dt1.Rows[0]["position"].ToString() == "5") 53 droptw.SelectedIndex = 3; 54else55 droptw.SelectedIndex = 4; 56 } 57if (str[i] == "13:00") 58 { 59if (dt1.Rows[0]["position"].ToString() == "3") 60 tropthir.SelectedIndex = 1; 61elseif (dt1.Rows[0]["position"].ToString() == "4") 62 tropthir.SelectedIndex = 2; 63elseif (dt1.Rows[0]["position"].ToString() == "5") 64 tropthir.SelectedIndex = 3; 65else66 tropthir.SelectedIndex = 4; 67 } 68if (str[i] == "14:00") 69 { 70if (dt1.Rows[0]["position"].ToString() == "3") 71 dropfour.SelectedIndex = 1; 72elseif (dt1.Rows[0]["position"].ToString() == "4") 73 dropfour.SelectedIndex = 2; 74elseif (dt1.Rows[0]["position"].ToString() == "5") 75 dropfour.SelectedIndex = 3; 76else77 dropfour.SelectedIndex = 4; 78 } 79 } 80 } 81 } 82 }
这篇代码有太多的if..else ,首先我们想到的是switch来优化,如图:
把相同的代码写一个方法,以后一旦下拉列表的SelectedIndex的维护,只来这个方法修改即可,不必去每一个if内检查,或是查找替换。
然后我们就可以去修改上抽离的代码,Insus.NET把重构部分comment掉:
现在我们把comment的代码删除,变成下面这个样子,代码简洁多了:
但是上面经首次重构之后,if还是太多,学习过设计模式的话,看到这部分程序,自然想起使用《设计模式--中介(Mediator)模式》http://www.cnblogs.com/insus/p/4134383.html 中介者模式来解决。只管传入str[i]值进去即可,用户不必明白它是怎样处理与判断,达到封装效果:
运用设计模式来进行重构:
最后一个private int SetSelectIndex(string position)方法,我们也把它移至中介者类别中去了:
所留给用户看到的代码,即是(删除comment):
以面向对象编程来说,上面高亮两行代码,应该它来自一个对象,不管你的程序是使用存储过程还是写SQL语句,我们尽量不要出现在xxx.aspx.cs代码页中:
现在我们回过头去看中介者SwitchObject类,它最底的私有方法,其实使用了switch方法,在重构之中,也是一个很坏的使用。其实switch即是替代多个if判断。出现多个if时,我们又可以使用中介者模式来解决。
创建一个中介者类:
再来看看Insus.NET怎样对SwitchObject类修改:
重构到这里,整段程序也改得差不多了,但是在SwitchObject类中,还是有些代码是很不稳定的。有可能常被修改,因此,我们还是把它移走。只留下稳定代码:
移到哪里,Insus.NET想把它移至最原始的位置,在移动之前Select()方法,需要小修改一下,期望传入另外一个参数:
回至xxx.aspx.cs的 public void show2(string day)方法:
似乎改得有点问题,正确来说,当传入的position为空时,它等于4。而不是获取的selectedIndex不等于4时等于4。
重构完毕,最终源程序可从下面链接下载:
http://download.cnblogs.com/insus//Refactoring/RefactoringAndMediator_pattern.rar
最后,原文网址:http://www.cnblogs.com/insus/p/4139346.html (支持下正版)
原文:http://www.cnblogs.com/ajunForNet/p/4145385.html
内容总结
以上是互联网集市为您收集整理的开发(ASP.NET程序)把写代码写至最有面向对象味道全部内容,希望文章能够帮你解决开发(ASP.NET程序)把写代码写至最有面向对象味道所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。