步步为营 .NET 代码重构学习笔记 七
一、Extract Class(提炼类)
动机(Motivation)
一个class应该是一个清楚的抽象(abstract),处理一些明确的责任。但在实际工作中,class会不断成长扩展。这个class会变得过份复杂,很快,class就会变成一团乱麻。
示例
public class Person{private string _name;private string _officeAreaCode;private string _officeNumber;public string Name{get { return _name; }set { _name = value; }}public string OfficeAreaCode{get { return _officeAreaCode; }set { _officeAreaCode = value; }}public string OfficeNumber{get { return _officeNumber; }set { _officeNumber = value; }}public string TelephoneNumber{get { return "(" + _officeAreaCode + ")" + _officeNumber; }}}
改为
public class Person{private string _name;private Telephone _telephoneNumber;public Telephone TelephoneNumber{get { return _telephoneNumber; }set { _telephoneNumber = value; }}public string Name{get { return _name; }set { _name = value; }}public string TemphoneNumber{get { return _telephoneNumber.TelephoneNumber; }}}public class Telephone{private string _officeAreaCode;private string _officeNumber;public string OfficeAreaCode{get { return _officeAreaCode; }set { _officeAreaCode = value; }}public string OfficeNumber{get { return _officeNumber; }set { _officeNumber = value; }}public string TelephoneNumber{get { return "(" + _officeAreaCode + ")" + _officeNumber; }}}
二、Inline Class(将类内联化)
动机(Motivation)
一个class不再承担足够责任、不再有单独存在的理由,将class的所有特性搬移到另一个class中,然后移除原class。
示例
public class User{private int _ID;private string _name;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}}public class UserInfo{private int _ID;private string _Age;public string ID{get { return _ID; }set { _ID = value; }}public string Age{get { return _Age; }set { _Age = value; }}}
改为
public class User{private int _ID;private string _name;private string _Age;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}public string Age{get { return _Age; }set { _Age = value; }}}
三、Hide Delegate(隐藏[委托关系])
动机(Motivation)
[封装]即使不是对象的最关键特征,也是最关键特征之一。[封装]意味每个对象都应该尽可能少了解系统的其它部分。如此一来,一旦发生变化,需要了解这变化的对象就会比较少,这会使谈化比较容易进行。
示例
public class User{private int _ID;private string _name;private Department _depart;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}public Department Depart{get { return _depart; }set { _depart = value; }}}public class Department{private string _departName;private User _manager;public string DepartName{get { return _departName; }set { _departName = value; }}public User Manager{get { return _manager; }set { _manager = value; }}}
改为
public class User{private int _ID;private string _name;private Department _depart;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}public Department Depart{get { return _depart; }set { _depart = value; }}public string DepartmentManager{get { return _depart.Manager; }}}public class Department{private string _departName;private User _manager;public string DepartName{get { return _departName; }set { _departName = value; }}public User Manager{get { return _manager; }set { _manager = value; }}}
这样取部门管理者就更直接,更方便,适合于少量使用。
但如果有大量的方法都用到了DepartmentManager里,我们就要去掉中间人了。
四、Remove Middle Man(移除中间人)
动机(Motivation)
大量重复的代码是万恶之源。这些重复性代码应该抽出来放进同一个函数中。
示例
public class User{private int _ID;private string _name;private Department _depart;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}public Department Depart{get { return _depart; }set { _depart = value; }}public string DepartmentManager{get { return _depart.Manager; }}}public class Department{private string _departName;private User _manager;public string DepartName{get { return _departName; }set { _departName = value; }}public User Manager{get { return _manager; }set { _manager = value; }}}
改为
public class User{private int _ID;private string _name;private Department _depart;public int ID{get { return _ID; }set { _ID = value; }}public string Name{get { return _name; }set { _name = value; }}public Department Depart{get { return _depart; }set { _depart = value; }}}public class Department{private string _departName;private User _manager;public string DepartName{get { return _departName; }set { _departName = value; }}public User Manager{get { return _manager; }set { _manager = value; }}}
在调用时就直接Depart.Manager来取得它的值.
步步为营 .NET 代码重构学习笔记 七相关推荐
- 步步为营 .NET 代码重构学习笔记 九
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 步步为营 .NET 代码重构学习笔记 十一
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 步步为营 .NET 代码重构学习笔记 十
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method)
一.Inline Method 概述 一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂. 动机(Motivation) 以简短的函数表现动作意图,这样会使 ...
- 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
动机(Motivation) Extract Method是我们最常用的重构手法之一.当我们看见一个过长的函数或一段需要注释才能让人理解用途的代码,我们就会将这段代码放进一个独立函数中. 有数个原因造 ...
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...
- 31 天重构学习笔记索引
由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的 ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 31天重构学习笔记下载
前言 前两天写了一篇程序猿也爱学英语(上),有图有真相的文章,写作那篇文章只是自己一时兴起,或者说是自己的兴趣使然.文中的观点只是自己的学习心得和体会,属一家之言且鉴于本人不是学英语出身,所以也肯定有 ...
最新文章
- Silverlight + Model-View-ViewModel (MVVM)
- 开发实习生做什么_实习生月薪6W,还有住房补贴!投行前台到底是做什么的?...
- 当年的程序员,如今已是父母,七个方法让孩子爱上学习!
- 【面试必备】透过源码角度一步一步带你走近阿里
- 【音视频架构演进:边缘计算与云原生】
- OpenCV3学习笔记二:图像的掩膜操作
- 【推荐算法】知识驱动的智能化推荐算法(附交流视频和PPT下载链接)
- oracle和sql server中,取前10条数据语法的区别
- mysql报错22_运行 mysql 遇到的两个报错
- 【NumPy基础】100道numpy练习——进阶篇
- DP 转移方程 —— 单调队列优化 斜率优化 李超树优化
- 计算机制图的相关标准,机械制图国家标准与计算机绘图.docx
- html字体名称有哪些,css有哪些字体系列?
- 【Uniapp】一、 UniAPP框架基本信息
- 你一定还不知道还有这么有意思的网站!感觉不是一般的皮!
- 分布式锁-这一篇全了解(Redis实现分布式锁完美方案)
- 分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络
- 2019年最推荐的五大Linux发行版
- 为什么Rust这么受欢迎?
- 字节跳动2019春招第二次笔试编程题