步步为营 .NET 代码重构学习笔记系列

步步为营 .NET 代码重构学习笔记 一、为何要代码重构

步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)

步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method)

步步为营 .NET 代码重构学习笔记 四、临时变量(Temporary Variable)

步步为营 .NET 代码重构学习笔记 五、分解函数和替换算法(Replace Method And Substitute Algorithm)

步步为营 .NET 代码重构学习笔记 六、移动函数和移动值域(Move Method And Move Field)

步步为营 .NET 代码重构学习笔记 七

步步为营 .NET 代码重构学习笔记 八

一、Duplicate Observed Data(复制[被监视数据])

动机(Motivation)

将该笔数据拷贝到一个domain object中。建立一个Observer模式,用以对domain object 和GUI object内的重复数据进行同步控制(sync)。

示例

步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)

二、Change Unidirectional Association to Bidirectional(将单向关联改为双向)

动机(Motivation)

添加一个反指针,并使修改函数(modifiers)能够同时更新两条连接。

示例

    public class Order{private Customer _customer;public Customer NewCustomer{get { return _customer; }set { _customer = value; }}}public class Customer{}

改为

   public class Order{public List<Customer> CustomerList = new List<Customer>();public void AddCustomer(Customer arg){arg.orderlist.Add(this);CustomerList.Add(arg);}public void RemoveCustomer(Customer arg){arg.orderlist.Remove(this);CustomerList.Remove(arg);}}public class Customer{public List<Order> orderlist = new List<Order>();public void AddOrder(Order arg){arg.CustomerList.Add(this);orderlist.Add(arg);}public void RemoveOrder(Order arg){arg.CustomerList.Remove(this);orderlist.Remove(arg);}}

三、Change Bidirectional Association to Unidirectional(将双向改为单向)

动机(Motivation)

两个classes之间有双向关联,但其中一个class如今不再需要另一个class的特性。

示例

public class Order{public List<Customer> CustomerList = new List<Customer>();public void AddCustomer(Customer arg){arg.orderlist.Add(this);CustomerList.Add(arg);}public void RemoveCustomer(Customer arg){arg.orderlist.Remove(this);CustomerList.Remove(arg);}}public class Customer{public List<Order> orderlist = new List<Order>();public void AddOrder(Order arg){arg.CustomerList.Add(this);orderlist.Add(arg);}public void RemoveOrder(Order arg){arg.CustomerList.Remove(this);orderlist.Remove(arg);}}

改为

    public class Order{private Customer _customer;public Customer NewCustomer{get { return _customer; }set { _customer = value; }}}public class Customer{}

四、Replace Magic Number with Symbolic Constant(以符号常量/字面常量取侙魔法数)

动机(Motivation)

创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量。

示例

        public double PotentialEnergy(double mass, double height){return mass * 9.51 * height;}

改为

        private double GRAVITATIONAL_CONSTANT = 9.51;public double PotentialEnergy(double mass, double height){return mass * GRAVITATIONAL_CONSTANT * height;}

五、Encapsulate Field(封装值域)

动机(Motivation)

将它声明为private,并提供相应的访问函数(accessors)

示例

public string _name;

改为

        private  string _name;public string Name{get { return _name; }set { _name = value; }}

六、Replace Type Code with Class(以类取代型别码)

动机(Motivation)

以一个新的class替换该数值型别码(type code)

示例

    public class Person{public  int O = 0;public  int A = 1;public  int B = 2;public  int AB = 3;private int _bloodGroup;public Person(int bloodGroup){_bloodGroup = bloodGroup;}public int NewBloodGroup{get { return _bloodGroup; }set { _bloodGroup = value; }}}

改为

 public class Person{public int O = BloodGroup.O.Code;public int A = BloodGroup.A.Code;public int B = BloodGroup.B.Code;public int AB = BloodGroup.AB.Code;private int _bloodGroup;public Person(int bloodGroup){_bloodGroup = bloodGroup;}public int NewBloodGroup{get { return _bloodGroup; }set { _bloodGroup = value; }}}public class BloodGroup{public static BloodGroup O = new BloodGroup(0);public static BloodGroup A = new BloodGroup(1);public static BloodGroup B = new BloodGroup(2);public static BloodGroup AB = new BloodGroup(3);private int _code;private BloodGroup(int code){_code = code;}public int Code{get { return _code; }set { _code = value; }}}

步步为营 .NET 代码重构学习笔记 九相关推荐

  1. 步步为营 .NET 代码重构学习笔记 十一

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  2. 步步为营 .NET 代码重构学习笔记 十

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  3. 步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method)

    一.Inline  Method 概述 一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂. 动机(Motivation) 以简短的函数表现动作意图,这样会使 ...

  4. 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)

    动机(Motivation) Extract Method是我们最常用的重构手法之一.当我们看见一个过长的函数或一段需要注释才能让人理解用途的代码,我们就会将这段代码放进一个独立函数中. 有数个原因造 ...

  5. 步步为营 .NET 代码重构学习笔记 七

    一.Extract Class(提炼类) 动机(Motivation) 一个class应该是一个清楚的抽象(abstract),处理一些明确的责任.但在实际工作中,class会不断成长扩展.这个cla ...

  6. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  7. 31 天重构学习笔记索引

    由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的 ...

  8. 31天重构学习笔记下载

    前言 前两天写了一篇程序猿也爱学英语(上),有图有真相的文章,写作那篇文章只是自己一时兴起,或者说是自己的兴趣使然.文中的观点只是自己的学习心得和体会,属一家之言且鉴于本人不是学英语出身,所以也肯定有 ...

  9. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

最新文章

  1. Paper9:Fast RCNN
  2. 从0梳理1场NLP赛事!
  3. 蓝桥杯国赛-估计人数
  4. 内存泄露问题改进(转自vczh)
  5. 5种JavaScript中常用的排序方法
  6. Mybatis的insert方法
  7. 话里话外:浅谈国企绩效考核问题(二)
  8. 第一章计算机网络概述答案,第一章 计算机网络概述[3]
  9. Gentle中的数据表实体类相关自定义属性的设置和获得
  10. qwebkit 服务器调用本地html方法,用qt的QWebkit类调用谷歌地图
  11. 【转载】给程序员的圣诞大礼★★春夏
  12. 安卓boot.img文件详细介绍-解包,编辑,打包
  13. 如何在百度文库复制内容
  14. CTPN论文翻译——中英文对照
  15. unity中世界坐标与局部坐标
  16. PHP消息队列的实现方式
  17. 微软,招 Java 了!
  18. HBase【环境搭建 01】CentOS 7.5 部署 hbase-2.4.5 单机版standalone模式(详细安装+配置+增删改查测试脚本)(附开源镜像站地址)
  19. 计算机数制转换操作方法,计算机基础 数制及其相互转换
  20. 13 Msql之四种事务隔离界别

热门文章

  1. 刚刚,“达摩院2020十大科技趋势”正式发布!
  2. html背景音乐demo,music.html
  3. WAIC2021:优必选AMR智能物流机器人解决方案首次国内亮相
  4. 一文了解卷积神经网络基础,建议收藏
  5. 「人工智能视觉」一直被消费者忽视的工业领域应用
  6. 百度飞桨入选互联网领先科技成果,王海峰:AI进入工业化大生产新阶段
  7. SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出-
  8. 产品经理也能动手实践的AI(一)- FastAI介绍
  9. 掌握图神经网络GNN基本,看这篇文章就够了
  10. 机器学习中的特征——特征选择的方法以及注意点