zoukankan      html  css  js  c++  java
  • 步步为营 .NET 代码重构学习笔记 四、分解函数和替换算法(Replace Method And Substitute Algorithm)

    Replace Method with Method Object

    概述

    将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field),然后你可以在同一个对象中将这个大型函数分解为数个小型函数.

    动机(Motivation)

    小型函数优美动人,只要将相对独立的代码从大型函数中提炼出来,就可以大在提高代码的可读性.

    示例

    1 public int Gamma(int inputValue, int quantity, int yearToDate)
    2 {
    3     int importantValue1 = inputValue * quantity + DateTime.Now.Minute;
    4     int importantValue2 = inputValue * yearToDate + 100;
    5     if ((yearToDate - importantValue1) > 100)
    6         importantValue2 -= 20;
    7     int importantValue3 = importantValue2 * 7;
    8     return importantValue3 - 2 * importantValue1;
    9 }

    改为

    01 private int importantValue1;
    02 private int importantValue2;
    03 private int importantValue3;
    04  
    05 public int Gamma(int inputValue, int quantity, int yearToDate)
    06 {
    07     importantValue1 = inputValue * quantity + DateTime.Now.Minute;
    08     importantValue2 = inputValue * yearToDate + 100;
    09     ImportantThing(yearToDate);
    10     importantValue3 = importantValue2 * 7;
    11     return importantValue3 - 2 * importantValue1;
    12 }
    13  
    14 private void ImportantThing(int yearToDate)
    15 {
    16     if ((yearToDate - importantValue1) > 100)
    17         importantValue2 -= 20;
    18 }

    Substitute Algorithm(替换你的算法)

    概述

    将函数本体(method body)替换为另一个算法。

    动机(Motivation)

    如果你发现做一件事可以有更清晰的方式,就应该以较清晰的方式取代复杂方式。可以把一些复杂的东西分解为较简单的小块,但有时你就是必须壮士断腕,删掉整个算法,代之较简单的算法。

    示例

    01 public string FoundPerson(string[] people)
    02 {
    03     for (int i = 0; i < people.Length; i++)
    04     {
    05         if (people[i].Equals("Don"))
    06         {
    07             return "Don";
    08         }
    09         if (people[i].Equals("John"))
    10         {
    11             return "John";
    12         }
    13         if (people[i].Equals("Kent"))
    14         {
    15             return "Kent";
    16         }
    17     }
    18     return "";
    19 }

    改为

    01 public string FoundPerson(string[] people)
    02 {
    03     List<string> candidates = new List<string>() { "Don""John""Kent" };
    04     for (int i = 0; i < people.Length; i++)
    05     {
    06         if (candidates.Contains(people[i]))
    07             return people[i];
    08     }
    09     return "";
    10 }

    总结

    小型函数优美动人,用较清晰方式取代复杂方式,易于阅读

  • 相关阅读:
    python linecache模块 快速读取模块某行
    51单片机扩展protues仿真
    python 字符串过滤技巧 搜索目录
    51单片机(STC89C52RC)光电耦合控制继电器实验
    python 获取当前当前目录 脚本目录 被执行脚本目录
    51单片机(STC89C52RC)EEPROM操作实验
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    Python __getattr__与__setattr__使用方法
    51单片机(STC89C52RC)看门狗设置
    jquery的Dtree树插件简单使用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2054856.html
Copyright © 2011-2022 走看看