zoukankan      html  css  js  c++  java
  • 重构手法(一)之重新组织函数

    1、Extract Method(提炼函数)

    重构前:

    void printOwing(double amount){
        printBanner();
    
        //print details        
        System.out.println("name:" + _name);
        System.out.println("amount" + amount);
    }

    重构后:

    void printOwing(double amount){
        printBanner();
        printDetails(amount);
    }
    
    void printDetails(double amount){
        System.out.println("name:" + _name);
        System.out.println("amount" + amount);    
    }

    2、Inline Method(内联函数)

    重构前:

    int getRating(){
        return (moreThanFiveLateDeliveries()) ? 2 : 1;    
    }
    
    boolean moreThanFiveLateDeliveries(){
        return _numberOfLateDeliveries > 5;
    }

    重构后

    int getRating(){
        return (_numberOfLateDeliveries > 5) ? 2 : 1;
    }

    3、Inline Temp(内联临时变量)

    重构前:

    double basePrice = anOrder.basePrice();
    return (basePrice > 1000);

    重构后:

    return (anOrder.basePrice() > 1000);

    4、Replace Temp with Query(以查询取代临时变量)

    重构前:

    double basePrice = _quantity * _itemPrice;
    if(basePrice > 1000)
        return basePrice * 0.95;
    else
        return basePrice * 0.98;

    重构后:

    if(basePrice() > 1000)
        return basePrice() * 0.95;
    else
        return basePrice() * 0.98;
    
    double basePrice(){
        return _quantity * _itemPrice;    
    }

    5、Introduce Explaining Variable(引入解释性变量)

    重构前:

    if((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0)
    {
        //do something
    }

    重构后:

    final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
    final boolean isIEBrowser = browser.toUpperCase().indexOf("IE) > -1;
    final boolean wasResized = resize > 0;
    
    if(isMacOs && isIEBrowser && wasInitialized() && wasResized){
        //do something
    }

    6、Split Temporary Variable(分解临时变量)

    重构前:

    double temp = 2 * (_height + _width);
    System.out.println(temp);
    temp = _height * _width;
    System.out.println(temp);

    重构后:

    final double perimeter = 2 * (_height + _width);
    System.out.println(perimeter);
    final double area = _height * _width;
    System.out.println(area);

    7、Remove Assignments to Parameters(移除对参数的赋值)

    重构前:

    int discount(int inputVal, int quantity, int yearToDate){
        if(inputVal > 50)
            inputVal -= 2;    
    }

    重构后:

    int discount(int inputVal, int quantity, int yearToDate){
        int result = inputVal;
        if(inputVal > 50)
            result -= 2;
    }

    8、Replace Method with Method Object(以函数对象取代函数)

    9、Substitute Algorithm(替换算法)

    重构前:

    String foundPerson(String[] people){
        for(int i = 0; i < people.length; i++){
            if(people[i].equals("Don")){
                return "Don";
            }      
            if(people[i].equals("John")){
                return "John";
            }  
            if(people[i].equals("Kent")){
                return "Kent";
            } 
        }
        return "";
    }

    重构后:

    String foundPerson(String[] people){
        List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"});
        for(int i = 0; i < people.length; i++){
            if(candidates.contains(people[i]))
                return people[i];
        }  
        return "";
    }
  • 相关阅读:
    阿里云在云栖大会发布SaaS加速器3.0版最新成果,让天下没有难做的SaaS
    阿里云重磅发布全域集成解决方案,帮助提升5倍全域集成效率
    2019亚太内容分发大会,阿里云获CDN领袖奖、技术突破奖
    阿里云应用上边缘云解决方案助力互联网All in Cloud
    云栖大会压轴好戏 阿里云智能视频云专场划重点啦!
    阿里云研究员金戈:视频云新“三网一云”,驱动行业应用创新
    阿里云启动视频云V5计划,全面赋能生态合作伙伴
    数据库实例性能调优利器:Performance Insights
    n转m进制标准写法(必须记忆)
    傻逼暴力法画蛇皮矩阵图
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5162929.html
Copyright © 2011-2022 走看看