zoukankan      html  css  js  c++  java
  • C# 重构

    1.重构

    所谓重构也就是“保持软件的外在功能不变,重新调整其内部结构”。
    Rename:       改名了,类、函数、成员等名字都可以改。
    Extract Method:    将某段代码封到一个新函数里。
    ------------------------------
    Encapsulate Field:   将某个字段转成属性
    Extract Interface:   将某个属性或函数转成一个接口,从而是当前的这个属性或函数成为接口实现。 
    Promote Local Variable to Parameter: 将某个局部变量提升为函数参数 
    Reorder Parameters:  对函数参数排序
    Remove Parameters:  删除某个函数参数,但函数内对这个参数的使用不会删除。

    重构函数(CHAPTER6)

    Extract Method
    前提:已经通过其他重构方法处理了间接变量。
    目的:缩小函数的粒度以增加复用;强化代码的清晰度。
    目标:函数的名称能够很好的表达函数要实现的“功能”。而不是要怎样做。

    Inline Method

    是Extract Method  的逆过程。正是因为有了这些逆过程,你才可以放心大胆的进行重构。

    前提:被Inline的函数不能是多态的。Inline后无法表达多态的情况。
    目的:去掉非必要的间接性。或者用于重组的一组组织不合理的函数的前提。
    目标:去掉不必要的函数或者过多的委托。

    提取方法是最常用的重构之一。当一个方法看起来太长或者方法中一些代码需要注释才能明白它的目的时,可以考虑把它们提取出来作为一个独立的方法。如:

    void PrintOwing()
    {

      double outstanding = 0;  
      //print banner
      Console.WriteLine("**********");
      Console.WriteLine("***Owes***");
      Console.WriteLine("**********");
      //Calculate outstanding
      foreach(Order o in orders)
      {
        outstanding += o.Amount;
      }  
      //print details
      Console.WriteLine("Name: " + name);
      Console.WriteLine("Amount: " + outstanding);
    }

      通过提取方法,重构后代码如下

    void PrintOwing()
    {
      PrintBanner();
      outstanding = GetOutStanding();
      PrintDetails(outstanding);
    }
    void PrintBanner()
    {
      Console.WriteLine("**********");
      Console.WriteLine("***Owes***");
      Console.WriteLine("**********");
    }
    void PrintDetails(int outstanding)
    {
      Console.WriteLine("Name: " + name);
      Console.WriteLine("Amount: " + outstanding);
    }
      
    int GetOutStanding()
    {
      double result = 0;  
      foreach(Order o in orders)

      {
         result += o.Amount;
      }  
      return result;
    }

      经过重构后,代码看上去清爽多了。提取方法还可以提高代码的重用性,提高代码的模块化程度。

     

    *使用方法:选择需要重构的方法或属性,右键--->重构--->选择相应的操作即可。

  • 相关阅读:
    使用私有api实现自己的iphone桌面,并根据app的使用次数对app排序
    坐标系的属性
    带坐标轴的几何画板
    空间几何体的直观图matlab
    设置npm的registry
    (原创)机器学习之numpy库中常用的函数介绍(一)
    (原创)交叉编译 tesseract
    (原创)计算机视觉之数学原理-基础篇
    (原创)nRF51 DFU 初始化包介绍及生成工具
    (原创)使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五
  • 原文地址:https://www.cnblogs.com/cuishao1985/p/1505495.html
Copyright © 2011-2022 走看看