仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 661|回复: 8
打印 上一主题 下一主题

[学习教程] C#中怎样举行重构(一)

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。在上一篇中有提到了甚么时分我们的代码必要重构,但详细到细节上应当怎样重构我们的代码呢?上面就是在C#代码重构中经常使用的体例和技能。这些办法和技能不单单是在重构顶用到,更主要的是我们在入手下手编写代码的时分就要注重到这些,以进步我们代码的质量。

1,封装汇合
观点:本文所讲的封装汇合就是把汇合举行封装,只供应挪用端必要的接口。

注释:在良多时分,我们都不但愿把一些不用要的操纵表露给挪用端,只必要给它所必要的操纵或数据就行,那末做法就是封装。这个重构在微软的代码库也常常碰到。好比最典范的属性对字段的封装就是一个很好的例子,好比挪用端只必要一个汇合的信息,而我们则供应了一个IList的汇合,人人都晓得IList具有对汇合的一切操纵,以是这会带来良多隐患,最好的做法就是对它举行重构,把IList换成了IEnumerable,人人都晓得只包含一个前往值为IEnumerator的GetEnumerator()办法,以是如许只能遍历掏出它的值,而不克不及对这个汇合做出改动,这恰是我们所必要的了局。

总结:这个例子很简单让我们想到之前体系间耦合常喜好用数据库。每一个体系城市操纵数据库,而且有些体系还会对数据库的表布局或字段举行修正,那末这很简单就会形成保护的天堂,很明智的一个做法就是利用SOA来离隔这些耦合,让一些只必要数据展现的体系失掉本人必要的数据便可。

2,挪动办法
观点:本文所讲的挪动办法就是办法放在符合的地位(一般指放在符合的类中)。

注释:挪动办法是一个很复杂也很罕见的重构,只需是体系就会存在良多类,那末类内里包含良多办法,假如一个办法常常被别的一个类利用(比自己的类利用还多)大概这个办法自己就不该该放在这个类内里,那末这个合适应当思索把它移到符合的类中。

总结:这个重构法例在良多时分能让我们把代码构造的布局调剂得更公道,同时也能赐与后
的保护带来便利。

3,提拔办法
观点:提拔办法是指将一个良多承继类都要用到的办法提拔到基类中。

注释:提拔办法是指将一个良多承继类都要用到的办法提拔到基类中,如许就可以削减代码量,同时让类的布局更明晰。

总结:这个重构要依据详细情形利用,假如不是每一个子类都有这个办法的话,能够思索利用接口大概其他体例。

4,下降办法
观点:下降办法和后面的提拔办法整好相反,也就是把一般子类利用到的办法从基类移到子类内里往。

总结:面向工具三年夜特性(承继、封装、多态)良多时分能够匡助我们,但同时也大概会形成利用过分大概利用不妥,以是怎样掌控好计划,这个就变得相当主要。在甚么时分利用承继的体例,在甚么时分利用组合和聚合,接口和承继类的选择等久成了我们的重点。

5,提拔字段
观点:本文中的提拔字段和后面的提拔办法很是类似,就是把子类公用的字段提拔到基类中,从而到达公用的目标。

总结:这个重构的战略对照复杂,同时也是对照经常使用的一些做法,最次要就是要注重衡量是不是真的有这个需要,看如许做事实有无甚么优点(好比只必要改一个中央,保护烦琐了,同时期码量也更少了等)。

6,下降字段
观点:本文中的下降字段和后面的提拔字段恰好相反,就是把基类中只要某些多数类用到的字段下降到利用它们的子类中。

总结:此重构也是一个十分复杂的重构,在良多时分我们城市不盲目的利用它。

7,重定名(办法,类,参数)
观点:本文中的更名(办法,类,参数)是指在写代码的时分对类、办法、参数、托付、事务等等元素取一个成心义的称号。

总结:此重构常常被宽大程序员所无视,可是带来的隐患是不成估计的,大概老板要修正功效,那我们来看这段没有重构的代码(就算是本人写的,但因为工夫和项目多等干系,我们也很难了解了),然后就会变得焦头烂额。相反重构后的代码就会以为一览无余、心旷神怡。

8,利用委派取代承继
观点:本文中的“利用委派取代承继”是指在基本没有父子干系的类中利用承继是分歧理的,能够用委派的体例来取代。

总结:这个重构是一个很好的重构,在很年夜水平上办理了滥用承继的情形,良多计划形式也用到了这类头脑(好比桥接形式、适配器形式、战略形式等)。在OO计划头脑上也常讲到这点,只管利用聚合/组合,少利用承继。

9,提取接口
观点:本文中的“提取接口”是指凌驾一个的类要利用某一个类中部分办法时,我们应当解开它们之间的依附,让挪用者利用接口,这很简单完成也能够下降代码的耦合性。

总结:这个重构战略也是一个罕见的使用,良多计划形式也会在个中使用此头脑(如复杂工程、笼统工场等城市经由过程接口来解开依附)。

10,提取办法
观点:本文中的把某些盘算庞大的历程依照功效提取成各个小办法,如许就能够使代码的可读性、保护性失掉进步。

总结:这个重构在良多公司都有一些的代码标准作为参考,好比一个类不克不及凌驾几行代码,一个办法内里不克不及凌驾几行代码,这在必定水平上也能使程序员把这些庞大的逻辑剥离成意义很分明的小办法。

11,利用战略类
观点:本文中的“利用战略类”是指用计划形式中的战略形式来交换本来的switchcase和ifelse语句,如许能够解开耦合,同时也使保护性和体系的可扩大性年夜年夜加强。

总结:这类重构在计划形式傍边把它独自取了一个名字——战略形式,如许做的优点就是能够离隔耦合,以注进的情势完成功效,这使增添功效变得加倍简单和烦琐,一样也加强了全部体系的不乱性和强健性。

12,分化依附
观点:本文中的“分化依附”是指对部分不满意我们请求的类和办法举行依附分化,经由过程粉饰器来到达我们必要的功效。

总结:这个重构在良多时分和计划形式中的一些头脑相似,利用两头的粉饰接口来分化两个类之间的依附,对类举行粉饰,然后使它满意我们所必要的功效。

13,提取办法工具
观点:本文中的“提取办法工具”是指当你发明一个办法中存在过量的部分变量时,你能够经由过程利用“提取办法工具”重构来引进一些办法,每一个办法完成义务的一个步骤,如许可使得程序变得更具有可读性。

总结:本文的重构办法在有的时分仍是对照有效,但如许会形成字段的增添,同时也会带来一些保护的方便,它和“提取办法”最年夜的区分就是一个经由过程办法前往必要的数据,另外一个则是经由过程字段来存储办法的了局值,以是在很年夜水平上我们城市选择“提取办法”。

14,分别职责
观点:本文中的“分别职责”是指当一个类有很多职责时,将部分职责分别到自力的类中,如许也切合面向工具的五年夜特性之一的单一职责准绳,同时也能够使代码的布局加倍明晰,保护性更高。

总结:这个重构常常会用到,它和之前的“挪动办法”有几分类似的地方,让办法放在符合的类中,而且简化类的职责,同时这也是面向工具五年夜准绳之一和计划形式中的主要头脑。

15,移除反复内容
观点:本文中的“移除反复内容”是指把一些良多中央都用到的逻辑提炼出来,然后供应给挪用者一致挪用。

总结:这个重构很复杂,尽年夜多半程序员城市利用这类重构办法,但偶然因为习气、工夫、赶进度等缘故原由而疏忽它,以是会使得全部体系乱七八糟,各处都是Ctrl+C和Ctrl+V的陈迹。如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。
不帅 该用户已被删除
沙发
发表于 2015-1-18 12:52:11 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
只想知道 该用户已被删除
板凳
发表于 2015-1-24 16:53:43 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
admin 该用户已被删除
地板
发表于 2015-2-2 11:39:45 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
变相怪杰 该用户已被删除
5#
发表于 2015-2-7 19:25:58 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
山那边是海 该用户已被删除
6#
发表于 2015-2-23 09:51:36 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
小妖女 该用户已被删除
7#
发表于 2015-3-7 08:15:28 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
兰色精灵 该用户已被删除
8#
发表于 2015-3-14 17:56:57 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
柔情似水 该用户已被删除
9#
发表于 2015-3-21 14:07:57 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-30 00:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表