代码改变世界

31天重构学习笔记20. 提取子类

2010-06-28 22:32 by 圣殿骑士, 2618 阅读, 3 推荐, 收藏, 编辑
摘要:本文中的”提取子类”是指把基类中的一些不是所有子类都需要访问的方法调整到子类中。这个重构方法经常用来规范类的职责,和之前的一些重构方法也有些类似。 阅读全文

31天重构学习笔记19. 提取工厂类

2010-06-28 18:32 by 圣殿骑士, 3902 阅读, 4 推荐, 收藏, 编辑
摘要:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂。一种很好的方法就是提取工厂类。这个重构经常会在项目中使用,如果要创建的对象是一个,你可以采用简单工厂,但是这种方式还是会存在很多依赖,维护起来也比较不方便。所以推荐使用工厂方法模式,把实例化延迟到子类。如果你要创建一系列的对象,那么就推荐你使用抽象工厂模式,但是要注意不要过度设计,只要能满足不断变化的需求和给以后的维护和重构带来方便即可。 阅读全文

31天重构学习笔记18. 使用条件判断代替异常

2010-06-28 18:12 by 圣殿骑士, 3291 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断。这个重构在项目代码中也经常用到,因为对于一部分程序员,是很难把握什么时候用try catch ,什么地方该用try catch 。记得之前大家还专门讨论过这些,比如如何用好以及在大中型项目中应该把它放在哪一个组件中等。 阅读全文

31天重构学习笔记17. 提取父类

2010-06-28 15:53 by 圣殿骑士, 2756 阅读, 4 推荐, 收藏, 编辑
摘要:本文中的“提取父类”是指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们,这个和之前的很多重构有异曲同工之处。这个重构是典型的继承用法,很多程序员都会选择这样做,但是要注意正确的使用,不要造成过度使用了继承,如果过度使用了,请考虑用接口、组合和聚合来实现。 阅读全文

31天重构学习笔记16. 封装条件

2010-06-28 15:38 by 圣殿骑士, 3059 阅读, 5 推荐, 收藏, 编辑
摘要:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。这个重构在很大程度上能改善代码的可读性,尤其是在一个逻辑很复杂的应用中,把这些条件判断封装成一个有意义的名字,这样很复杂的逻辑也会立刻变得简单起来。 阅读全文

31天重构学习笔记15. 移除重复内容

2010-06-28 15:26 by 圣殿骑士, 2688 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的“移除重复内容”是指把一些很多地方都用到的逻辑提炼出来,然后提供给调用者统一调用。这个重构很简单,绝大多数程序员都会使用这种重构方法,但有时由于习惯、时间、赶进度等原因而忽略它,所以会使得整个系统杂乱无章,到处都是Ctrl+C和Ctrl+V的痕迹。 阅读全文

31天重构学习笔记14. 分离职责

2010-06-28 15:14 by 圣殿骑士, 3248 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的“分离职责”是指当一个类有许多职责时,将部分职责分离到独立的类中,这样也符合面向对象的五大特征之一的单一职责原则,同时也可以使代码的结构更加清晰,维护性更高。这个重构经常会用到,它和之前的“移动方法”有几分相似之处,让方法放在合适的类中,并且简化类的职责,同时这也是面向对象五大原则之一和设计模式中的重要思想。 阅读全文

31天重构学习笔记13. 提取方法对象

2010-06-28 15:01 by 圣殿骑士, 2991 阅读, 1 推荐, 收藏, 编辑
摘要:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性。本文的重构方法在有的时候还是比较有用,但这样会造成字段的增加,同时也会带来一些维护的不便,它和“提取方法”最大的区别就是一个通过方法返回需要的数据,另一个则是通过字段来存储方法的结果值,所以在很大程度上我们都会选择“提取方法”。 阅读全文

31天重构学习笔记12. 分解依赖

2010-06-28 14:44 by 圣殿骑士, 3643 阅读, 5 推荐, 收藏, 编辑
摘要:本文中的“分解依赖” 是指对部分不满足我们要求的类和方法进行依赖分解,通过装饰器来达到我们需要的功能。这个重构在很多时候和设计模式中的一些思想类似,使用中间的装饰接口来分解两个类之间的依赖,对类进行装饰,然后使它满足我们所需要的功能。 阅读全文

31天重构学习笔记11. 使用策略类

2010-06-28 14:24 by 圣殿骑士, 4912 阅读, 7 推荐, 收藏, 编辑
摘要:本文中的“使用策略类” 是指用设计模式中的策略模式来替换原来的switch case和if else语句,这样可以解开耦合,同时也使维护性和系统的可扩展性大大增强。这种重构在设计模式当中把它单独取了一个名字——策略模式,这样做的好处就是可以隔开耦合,以注入的形式实现功能,这使增加功能变得更加容易和简便,同样也增强了整个系统的稳定性和健壮性。 阅读全文

31天重构学习笔记10. 提取方法

2010-06-28 13:43 by 圣殿骑士, 3474 阅读, 4 推荐, 收藏, 编辑
摘要:本文中的把某些计算复杂的过程按照功能提取成各个小方法,这样就可以使代码的可读性、维护性得到提高。这个重构在很多公司都有一些的代码规范作为参考,比如一个类不能超过多少行代码,一个方法里面不能超过多少行代码,这在一定程度上也能使程序员把这些复杂的逻辑剥离成意义很清楚的小方法。 阅读全文

31天重构学习笔记9. 提取接口

2010-06-28 12:31 by 圣殿骑士, 3972 阅读, 8 推荐, 收藏, 编辑
摘要:本文中的“提取接口” 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性。这个重构策略也是一个常见的运用,很多设计模式也会在其中运用此思想(如简单工程、抽象工厂等都会通过接口来解开依赖)。 阅读全文

31天重构学习笔记8. 使用委派代替继承

2010-06-28 12:16 by 圣殿骑士, 4386 阅读, 12 推荐, 收藏, 编辑
摘要:本文中的“使用委派代替继承”是指在根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。这个重构是一个很好的重构,在很大程度上解决了滥用继承的情况,很多设计模式也用到了这种思想(比如桥接模式、适配器模式、策略模式等)。 阅读全文

31天重构学习笔记7. 重命名(方法,类,参数)

2010-06-28 12:00 by 圣殿骑士, 3822 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的改名(方法,类,参数)是指在写代码的时候对类、方法、参数、委托、事件等等元素取一个有意义的名称。此重构经常被广大程序员所忽视,但是带来的隐患是不可估量的,也许老板要修改功能,那我们来看这段没有重构的代码(就算是自己写的,但由于时间和项目多等关系,我们也很难理解了),然后就会变得焦头烂额。相反重构后的代码就会觉得一目了然、赏心悦目。 阅读全文

31天重构学习笔记6. 降低字段

2010-06-28 11:49 by 圣殿骑士, 3169 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的降低字段和前篇的提升字段正好相反,就是把基类中只有某些少数类用到的字段降低到使用它们的子类中。 此重构也是一个非常简单的重构,在很多时候我们都会不自觉的使用它。 阅读全文

31天重构学习笔记5. 提升字段

2010-06-28 11:41 by 圣殿骑士, 3614 阅读, 2 推荐, 收藏, 编辑
摘要:本文中的提升字段和前面的提升方法颇为相似,就是把子类公用的字段提升到基类中,从而达到公用的目的。这个重构的策略比较简单,同时也是比较常用的一些做法,最主要就是要注意权衡是否真的有这个必要,看这样做究竟有没有什么好处(比如只需要改一个地方,维护简便了,同时代码量也更少了等)。 阅读全文

31天重构学习笔记4. 降低方法

2010-06-28 11:31 by 圣殿骑士, 3852 阅读, 5 推荐, 收藏, 编辑
摘要:本文中的降低方法和前篇的提升方法整好相反,也就是把个别子类使用到的方法从基类移到子类里面去。面向对象三大特征(继承、封装、多态)很多时候可以帮助我们,但同时也可能会造成使用过度或者使用不当,所以如何把握好设计,这个就变得至关重要。在什么时候使用继承的方式,在什么时候使用组合和聚合,接口和继承类的选择等久成了我们的重点。 阅读全文

31天重构学习笔记3. 提升方法

2010-06-28 03:52 by 圣殿骑士, 5053 阅读, 7 推荐, 收藏, 编辑
摘要:提升方法是指将一个很多继承类都要用到的方法提升到基类中。这个重构要根据具体情况使用,如果不是每个子类都有这个方法的话,可以考虑使用接口或者其他方式。 阅读全文

31天重构学习笔记2. 移动方法

2010-06-28 03:49 by 圣殿骑士, 6672 阅读, 3 推荐, 收藏, 编辑
摘要:本文所讲的移动方法就是方法放在合适的位置(通常指放在合适的类中)。这个重构法则在很多时候能让我们把代码组织的结构调整得更合理,同时也能给以后的维护带来方便。 阅读全文

31天重构学习笔记1. 封装集合

2010-06-28 03:46 by 圣殿骑士, 15021 阅读, 57 推荐, 收藏, 编辑
摘要:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。这个例子很容易让我们想到以前系统间耦合常喜欢用数据库。每个系统都会操作数据库,并且有些系统还会对数据库的表结构或字段进行修改,那么这很容易就会造成维护的地狱,很明智的一个做法就是使用SOA来隔开这些耦合,让一些只需要数据展示的系统得到自己需要的数据即可。 阅读全文

.NET 技术社区谈之英文篇

2010-06-26 17:15 by 圣殿骑士, 5774 阅读, 24 推荐, 收藏, 编辑
摘要:前言:由于这几年一直专注于.NET的技术开发、管理和架构。所以很多时候都会关注一些社区和网站,但自己由于时间有限,或者是因为人懒,一直没有时间为社区做出贡献,偶感惭愧。几年下来对.NET也逐渐形成了自己的一套知识库,这要感谢这些技术社区,故而有此文诞生。文中的评价实属我(圣殿骑士)个人意见,如有不妥,还请多多见谅。如果想了解中文的.net技术社区,也可以参考.NET 技术社区之我见(中文篇)自己根... 阅读全文

.NET 技术社区谈之中文篇

2010-06-26 13:56 by 圣殿骑士, 5594 阅读, 15 推荐, 收藏, 编辑
摘要:前言:由于这几年一直专注于.NET的技术开发、管理和架构。所以很多时候都会关注一些社区和网站,但自己由于时间有限,或者是因为人懒,一直没有时间为社区做出贡献,偶感惭愧。几年下来对.NET也逐渐形成了自己的一套知识库,这要感谢这些技术社区,故而有此文诞生。文中的评价实属我(圣殿骑士)个人意见,如有不妥,还请多多见谅。如果想了解中文的.net技术社区,也可以参考.NET 技术社区之我见(英文篇)。描述... 阅读全文

项目重构方案设计

2010-06-23 11:28 by 圣殿骑士, 13987 阅读, 12 推荐, 收藏, 编辑
摘要:最近接手到一个已经成型的项目,然后我们的任务就是对它进行重构,这个项目是一个功能很齐全的WPF视频播放器(附带很多其他功能),在仔细研究了项目的背景和架构以后,初步做出了一下的重构方案:目前现状:虽然整个系统做得很漂亮,代码也写得不错,但仍有以下不足:架构有待改善。虽然看似MVC架构,却没有遵循MVC的模式,里面逻辑和UI耦合很高,没有清晰的规律。没有充分用到WPF的特性。WPF除了给我们很多炫丽的效果外,还给我们提供了诸如Binding,command等特性,这些特性可以帮我们隔开耦合,同时减少代码量。代码和文件没有组织。代码、dll、样式文件和资源文件等没有统一的组织,到处都有,这样看.. 阅读全文

(收藏)《博客园精华集》分类索引

2010-05-24 02:10 by 圣殿骑士, 24358 阅读, 242 推荐, 收藏, 编辑
摘要:由于这几年一直热衷于.NET技术,但由于自己项目很忙,也许是自己很懒,所以没能写出好的博文,但养成了每天浏览博客园文章的习惯。转眼间即将扎根五年,收获颇多,但很多时候难免会浪费很多时间在闲逛上,所以找到了一些比较好的文章,这样可以供以后查阅(毕竟收藏夹不是万能,重装电脑就玩完了),也方便学习更多他人经验。感谢这些博文的作者和博客园精华集的整理者,同时希望博客园以后能继续这样归类,方便检索。也祝博客... 阅读全文

(收藏)《博客园精华集》WEB分册

2010-05-23 19:03 by 圣殿骑士, 6095 阅读, 7 推荐, 收藏, 编辑
摘要:HTML/CSS(7) ---- 网络之基石01. 一个常被问道的问题:如何让层盖住下拉列表框? (杨正祎)02. 对“设置样式时怎么区分input是按钮还是文本框”问题的技术调查——把input里面的东西剔出来 (杨正祎)03. "兼容 IE,Firefox 的图片自动缩放的CSS" (MaxIE)04. [教程] 谈谈网页设计中的字体应用 (1)... 阅读全文

(收藏)《博客园精华集》Sharepoint分册

2010-05-23 19:00 by 圣殿骑士, 2503 阅读, 5 推荐, 收藏, 编辑
摘要:一、Sharepoint是什么,我为什么要用它SharePoint教程[龍龙] WSS基础[jianyi] 如何规划面向业务逻辑的MOSS系统[dosboy] Moss2007入门(1)-功能概述[KingLau] MOSS2007入门(7):Navigation[KingLau] 实现SharePoint的无限潜力[Microtoby] 白领小秘Vivien的一个上午-officeSharePo... 阅读全文

(收藏)《博客园精华集》JavaScript(共213篇)

2010-05-23 18:59 by 圣殿骑士, 4706 阅读, 11 推荐, 收藏, 编辑
摘要:《博客园精华集》JavaScript部分筛选结果(共213篇) JavaScript面向对象之属性实现 作者:Truly 设计模式在JavaScript中的应用(2) -- Observer 作者:Truly 设计模式在JavaScript中的应用(1) 作者:Truly 在JavaScript中使用面向对象 作者:Truly 深入浅出JSON 作者:Truly 因utf-8编码引起js输出中文乱... 阅读全文

(收藏)《博客园精华集》网站维护性能安全(共16篇)

2010-05-23 18:58 by 圣殿骑士, 2398 阅读, 3 推荐, 收藏, 编辑
摘要:《博客园精华集》网站维护性能安全部分筛选结果(共16篇) 网络蜘蛛程序开发 作者:coffee如何利用客户端缓存对网站进行优化? 作者:Lion网站生成静态页面,及网站数据采集的攻、防原理和策略 作者:MaxIE从一次攻击看网站的设计 作者:二毛五什么是用户体验(ue),以及用户体验的关键 作者:黑*马性能,安全,集成才是web之道 作者:难得一蠢什么是网站流量 作者:青羽蛙蛙推荐:谈谈网络爬虫设... 阅读全文

(收藏)《博客园精华集》HTML/CSS部分筛选结果(共90篇)

2010-05-23 18:57 by 圣殿骑士, 2593 阅读, 3 推荐, 收藏, 编辑
摘要:《博客园精华集》HTML/CSS部分筛选结果(共90篇) [DIV+CSS] 绘制2重交叉表 作者:╃小〥斌╄网页中单一表格横纵表头锁定的细节 作者:birdshome使用乱序标签来控制HTML的输出效果 作者:birdshome细说HTML元素的ID和Name属性的区别 作者:birdshomeWeb页中的HTML元素的排版布局规则 作者:birdshome用CSS缩写给... 阅读全文

(收藏)《博客园精华集》WEB标准部分筛选结果(共55篇)

2010-05-23 18:56 by 圣殿骑士, 1532 阅读, 1 推荐, 收藏, 编辑
摘要:《博客园精华集》web标准部分筛选结果(共55篇) 一个喜欢网页设计的程序员 作者:Awen根本不存在 DIV + CSS 布局这回事 作者:Cat Chen欲练 CSS ,必先宫 IE 作者:Cat Chen你有 <table /> 强迫症吗? 作者:Cat ChenSPAN元素和DIV元素的区别 作者:Chris Liudiv 的认识 作者:Chris Liu实时检验您的页面是否符... 阅读全文

(收藏)《博客园精华集》ASP.NET分册

2010-05-23 18:53 by 圣殿骑士, 5715 阅读, 6 推荐, 收藏, 编辑
摘要:为什么foreach(HttpCookie cookie in Request.Cookies)会出错 作者:dudu解读System.Web.UI.Page中关键方法ProcessRequestMain() 作者:dudu在Asp.net页面中实现数据饼图 作者:TerryLee在Web页面中控制其元素的选择状态 作者:birdshomeASP.NET控件开发之"代码紧凑原则" 作者:birds... 阅读全文

(收藏)《博客园精华集》MOSS分类筛选结果(共68篇)

2010-05-23 18:48 by 圣殿骑士, 1711 阅读, 0 推荐, 收藏, 编辑
摘要:《博客园精华集》MOSS分类筛选结果(共68篇)WSS3.0 和 MOSS2007 对移动设备浏览器的支持(续) 作者: 黎波WSS3.0 和 MOSS2007 对移动设备浏览器的支持 作者: 黎波在客户端调用MOSS的搜索服务,实现更加灵活的搜索控制 作者: 永春MOSS SDK学习(1) 作者: 永春MOSS SDK学习(2) 作者: 永春MOSS SDK学习(3) 作者: 永春MOSS SD... 阅读全文

(收藏)《博客园精华集》CLR/C#分册

2010-05-23 18:44 by 圣殿骑士, 5078 阅读, 17 推荐, 收藏, 编辑
摘要:下面是具体的筛选结果:CLRMcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结), aierong您知道吗:未释放事件Handler可能导致内存泄漏, Anders06理解.NET中的异常(一), Anders Cui理解.NET中的异常(二), Anders Cui实现可克隆(Cloneable... 阅读全文

(收藏)《博客园精华集》LINQ筛选结果(共33篇)

2010-05-23 18:40 by 圣殿骑士, 2233 阅读, 4 推荐, 收藏, 编辑
摘要:《博客园精华集》LINQ筛选结果(共33篇)引爆你的集合灵感 [C#, LINQ] 作者:Allen LeeYU-GI-OH! POWER OF XLINQ [C#, XLINQ, XML] 作者:Allen LeeLINQ体验(1)——Visual Studio 2008新特性 作者:李永京LINQ体验(2)——C# 3.0新语言特性和改进(上篇)... 阅读全文

(收藏)《博客园精华集》Web控件筛选结果(共136篇)

2010-05-23 18:38 by 圣殿骑士, 1854 阅读, 2 推荐, 收藏, 编辑
摘要:《博客园精华集》Web控件筛选结果(共136篇)自定义分页控件 作者:netEagleasp.net 控件开发(三)------处理标签间内容 作者:Henllyee Cui如何定制日历控件显示的星期文字 作者:dudu设计有复杂客户端Script的服务器控件 作者:birdshome动态载入数据的无刷新TreeView控件(1) 作者:birdshome自动适应输入内容宽度的TextBox控件 ... 阅读全文

(收藏)《博客园精华集》Winform组件筛选结果(共29篇)

2010-05-23 18:37 by 圣殿骑士, 2462 阅读, 3 推荐, 收藏, 编辑
摘要:《博客园精华集》Winform组件筛选结果(共29篇).Net服务组件(ServicedComponent)简介及其使用 作者:Rickie面向对象与面向组件小议 作者:zhuweisky蛙蛙推荐:写一个主键生成组件(服务) 作者:蛙蛙池塘FlowDiagrams 简易模型绘图组件 作者:萧寒net下开发COM+组件(一) 作者:小y虚控件在GUI编程中的应用 作者:袁永福Windows Form... 阅读全文

(收藏)《博客园精华集》WebService筛选结果(共79篇)

2010-05-23 18:37 by 圣殿骑士, 2918 阅读, 4 推荐, 收藏, 编辑
摘要:《博客园精华集》WebService筛选结果(共79篇)深入学习Web Service系列之异步开发模式 作者:TerryLee客户端访问Web Service方法的一个细节 作者:Jeffrey Zhao新浪短信Web Service 作者:张逸[WS]Web服务系列(一) 简介 作者:八进制[WS]Web服务系列(二) Web服务的结构 作者:八进制[WS]一个简单的WSDL文档(上) 作者:... 阅读全文

(收藏)《博客园精华集》VSTS筛选结果(共43篇)

2010-05-23 18:36 by 圣殿骑士, 1059 阅读, 0 推荐, 收藏, 编辑
摘要:《博客园精华集》VSTS筛选结果(共43篇)删除TFS项目 作者:网魂小兵用VSTS进行网站压力测试 作者:Ring转:在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择 作者:Carlwave-陆飞(Fei.Lu)域环境中安装部署VSTS全过程 作者:蒜头Team Foundation Server P... 阅读全文

(收藏)《博客园精华集》VSTO筛选结果(共24篇)

2010-05-23 18:36 by 圣殿骑士, 1322 阅读, 2 推荐, 收藏, 编辑
摘要:《博客园精华集》VSTO筛选结果(共24篇)基于Visual Studio 2003/2005的Office插件开发FAQ 作者:Tony Qu探索 Word 2007 开发(二):扩展 Ribbon 作者:Allen Lee探索 Word 2007 开发(三):管理侧栏 作者:Allen Lee探索 Word 2007 开发(四):上传图片 作者:Allen Lee探索 Word 2007 开发... 阅读全文

(收藏)《博客园精华集》Winform筛选结果(共105篇)

2010-05-23 18:35 by 圣殿骑士, 3003 阅读, 6 推荐, 收藏, 编辑
摘要:让你的应用程序支持高对比度模式 作者:birdshome关于Remoting 作者:张逸Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇 作者:张逸Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务 作者:张逸Microsoft .Net Remoting系列专题之三:Remoting事... 阅读全文