zoukankan      html  css  js  c++  java
  • Extract Method(提炼方法)

    Extract Method方法
        将函数中过长的代码提炼出来,然后组织在一起并独立到一个新的独立方法中,并让方法名称解释该方法
    的用途.该方法最好之处是有效的减少了方法中的代码.

    实例代码如下:

     1 private string myName;
     2 public void printPeople(int Age)
     3 {
     4     printFamily();
     5     //无数代码//
     6 
     7     //打印个人信息
     8     Console.WriteLine("Name:" + myName);
     9         Console.WriteLine("Age:" + Age);
    10 }


    重构后的代码如下:

     1 private string myName;
     2 public void printPeople(int Age)
     3 {
     4     printFamily();
     5     //无数代码//
     6     printMyInfo(Age);
     7 }
     8 
     9 void printMyInfo(int Age)
    10 {
    11     Console.WriteLine("Name:" + myName);
    12         Console.WriteLine("Age:" + Age);
    13 }


    为什么要这样重构?当一个函数很大的时候,第一对代码的修改起来非常的不方便.
    第二,会对你读代码有障碍,试想一下当你看到一个很多行代码的方法,你还有心情看下去吗?
    第三,方法与方法之间的复用性会非常的好,方法的重写也会更容易些.

    那么我们应该怎么做呢?
    看第一个例子:
    无局部变量的方法提炼.

     1 void printOwing()
     2 {
     3     ArrayList al = myOrders.GetOrderList();
     4     double outstanding = 0.0;
     5 
     6     //打印头部信息
     7     Console.WriteLine("*****************");
     8     Console.WriteLine("**Customer Owes**");
     9     Console.WriteLine("*****************");
    10 
    11     //计算
    12     foreach(Object o in al)
    13     {
    14         Order each = (Order)o;
    15         outstanding += each.Amount;
    16     }
    17 
    18     //打印具体信息
    19     Console.WriteLine("Name:" + myName);
    20     Console.WriteLine("Age:" + age);
    21 }


    好了我们开始先提最简单的部分.提出后的代码如下:

     1 void printOwing()
     2 {
     3     ArrayList al = myOrders.GetOrderList();
     4     double outstanding = 0.0;
     5 
     6     printBanner();
     7 
     8     //计算
     9     foreach(Object o in al)
    10     {
    11         Order each = (Order)o;
    12         outstanding += each.Amount;
    13     }
    14 
    15     //打印具体信息
    16     Console.WriteLine("Name:" + myName);
    17     Console.WriteLine("Age:" + age);
    18 }
    19 
    20 void printBanner()
    21 {
    22     //打印头部信息
    23     Console.WriteLine("*****************");
    24     Console.WriteLine("**Customer Owes**");
    25     Console.WriteLine("*****************");
    26 }


    最简单的提炼方法结束了.
    下来我们看有局部变量的方法提炼.就拿上面的的代码开刀.

     1 void printOwing()
     2 {
     3     ArrayList al = myOrders.GetOrderList();
     4     double outstanding = 0.0;
     5 
     6     printBanner();
     7 
     8     //计算
     9     foreach(Object o in al)
    10     {
    11         Order each = (Order)o;
    12         outstanding += each.Amount;
    13     }
    14 
    15     printInfo(outstanding);
    16 }
    17 
    18 void printBanner()
    19 {
    20     //打印头部信息
    21     Console.WriteLine("*****************");
    22     Console.WriteLine("**Customer Owes**");
    23     Console.WriteLine("*****************");
    24 }
    25 
    26 void printInfo(double OutStanding)
    27 {
    28     //打印具体信息
    29     Console.WriteLine("Name:" + myName);
    30     Console.WriteLine("Age:" + age);   
    31 }


    我们再来看下对局部变量再赋值方法的提炼.继续拿上面代码开刀.

     1 void printOwing()
     2 {
     3     double outstanding = GetOutStanding();
     4 
     5     printBanner();
     6 
     7     printInfo(outstanding);
     8 }
     9 
    10 void printBanner()
    11 {
    12     //打印头部信息
    13     Console.WriteLine("*****************");
    14     Console.WriteLine("**Customer Owes**");
    15     Console.WriteLine("*****************");
    16 }
    17 
    18 void printInfo(double OutStanding)
    19 {
    20     //打印具体信息
    21     Console.WriteLine("Name:" + myName);
    22     Console.WriteLine("Age:" + age);   
    23 }
    24 
    25 double GetOutStanding()
    26 {
    27     ArrayList al = myOrders.GetOrderList();
    28     double outstanding = 0.0;
    29     //计算
    30     foreach(Object o in al)
    31     {
    32         Order each = (Order)o;
    33         outstanding += each.Amount;
    34     }
    35     return outstanding
    36 }


    Extract Method方法讲解玩了.有人会问为什么要这样写?这样写的好处我没有看到啊.
    那么现在有个这样的需求,我要设置outstanding的初始值,那么我们只要修改GetOutStanding方法,代码

    如下:

     1 double GetOutStanding(double previousAmount)
     2 {
     3     ArrayList al = myOrders.GetOrderList();
     4     double outstanding = previousAmount;
     5     //计算
     6     foreach(Object o in al)
     7     {
     8         Order each = (Order)o;
     9         outstanding += each.Amount;
    10     }
    11     return outstanding
    12 }


    主要方法修改如下:

    1 void printOwing()
    2 {
    3     double outstanding = GetOutStanding(500.5);
    4 
    5     printBanner();
    6 
    7     printInfo(outstanding);
    8 }
  • 相关阅读:
    Post请求data参数构造及巧用js脚本显示爬虫进度
    Javascript动态生成的页面信息爬取和openpyxl包FAQ小记
    Selenium实战脚本集—新浪微博发送QQ每日焦点
    linux下如何使用Mysql
    selenium 点击页面链接测试
    功能测试工具Selenium IDE
    JAVA + SELENIUM--环境搭建
    将Sublime Text 2搭建成一个好用的IDE
    Appium(JAVA)Windows 7系统搭建及示例运行
    python 进行web测试
  • 原文地址:https://www.cnblogs.com/qisheng/p/2340348.html
Copyright © 2011-2022 走看看