ZFYCH_Love

Simply but Powerful

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  115 随笔 :: 1 文章 :: 36 评论 :: 18万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

http://www.cnblogs.com/zenghongliang/archive/2010/06/28/1766436.html这是原文地址

这里仅仅是做了个总结,相当于速查手册。

1、对集合封装

集合,比如List<XXX> ,如果做为返回值,那也就把其自身所拥有的Add,Remove等方法暴漏了出去。如果对于调用方,仅仅是对其暴露展示功能,可以进行如下封装:

    private List<OrderLine> _orderLines;
        public IEnumerable<OrderLine> OrderLines
        {
            get { return _orderLines; }
        }

它只包含一个GetEnumerator()方法。

2、移动方法

移动方法是一个很简单也很常见的重构,只要是系统就会存在很多类,那么类里面包括很多方法,如果一个方法经常被另外一个类使用(比本身的类使用还多)或者这个方法本身就不应该放在这个类里面,那么这个适合应该考虑把它移到合适的类中。

点评:以上是原文,个人观点,这个概念真的不是这么表象。众所周知,我们的程序,为什么分层?数据层、逻辑层、UI层、Common....

为了结构清晰、为了复用,为了扩展方便等等诸多理由

如果真如作者所说,那我们岂不是又回到从前了吗?

这个也就是仅仅针对于个别局部方法(套用了局部变量和全局变量的概念)适用罢了。

3、提升方法

提升方法是指将一个很多继承类都要用到的方法提升到基类中。这个重构要根据具体情况使用,如果不是每个子类都有这个方法的话,可以考虑使用接口或者其他方式。

点评:接口也未必能行,如果不是每个子类都有这个方法,那接口一旦定义了,就要在这些不相干的子类中进行“假实现”。

还是没太理解作者的想法。因为这种行为,对于大多数人来说,是肯定会用的,毕竟避免重复代码的引申义就是减少工作量嘛。

后来看到一个回复,说的比较好:这个重构要根据具体情况使用,如果不是每个子类都有这个方法的话,可以考虑使用接口或者其他方式。

 4、下降方法

同时如果在父类Animal 中如果没有其他的字段或者公用方法的话,可以考虑把Bark方法做成一个接口,从而去掉Animal 类。

点评:这个真不敢完全认同了。我如果这样做了,我就要对外即公布接口,又公布具体实现类,为了一点的优化而改变了设计结构,得不偿失的感觉。

原文地址:http://www.cnblogs.com/KnightsWarrior/archive/2010/06/28/1766583.html

5、提升字段

把子类公用的字段提升到基类中,从而达到公用的目的。这样提的前提是这些子类有一个基类或者有很多相似的字段和方法,不然为了一个字段而单独建立一个抽象类是不可取的,所以这个就需要具体权衡。

点评:这个可以有,经常用到。

6、降低字段

本文中的降低字段和前篇的提升字段正好相反,就是把基类中只有某些少数类用到的字段降低到使用它们的子类中。

这样做的好处可以简化基类,同时让其他没有使用它的子类也变得更加简单,如果这样的字段比较多的话,使用此重构也能节约一部分内存。

 7、重命名

改名(方法,类,参数)是指在写代码的时候对类、方法、参数、委托、事件等等元素取一个有意义的名称

点评:这个的确如此。有时候在做项目时,感觉这个起名,真不是意见简单的事,既要让自己明白,还要让别人明白,照顾各方面。长了不行,短了也有问题。诸如此类,流汗。

8、 使用委派代替继承

本文中的“使用委派代替继承”是指在根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。

 

posted on   xiaoyang_  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示