zoukankan      html  css  js  c++  java
  • 重构之重新组织函数(Replace Temp With Query)

    Replace Temp with Query

    概述

    程序以一个临时变量(temp)保存某一表达式的运算结果。将这个表达式提炼到一个独立函数(查询式,query)中。将这个临时变量的所有(被引用点)替换为对新函数的调用。新函数可被其它函数使用。

    动机(Motivation)

    临时变量的问题在于,它们是暂时的,而且只能在所属函数内使用。由于临时变量只有在所属函数内才可见,所以它们会马驱使你写出更长的函数,因为只朋这样你才能访问到想要访问的临时变量。如果把临时变量替换为一个楂询式(query method),那么同一个class中的所有函数都将可以获得这份信息。这将带来极大帮助,使你能够为这个class编写更清晰的代码。

    作法(Mechanics)

    1、找出只被赋值一次的临时变量。

    如果某个临时变量被赋值超过一次,考虑使用Split Temporary Variable将它分割成多个变量。

    2、将该临时变量声明为final。

    3、编译。

    这可确保临时变量的确只被赋值一次。

    4、将对该临时变量赋值的语名的等号右侧部分提炼到一个独立函数中。

    首先将函数声明为private,日后你可能会发现有更多class需要使用它,彼时你可轻易放松对它的保护。

    确保提炼出来的函数无任何连带影响,也就是说该函数并不修改任何对象内容。如果它有连带影响,就对它进行Separate Query from Modifier。

    public class ReplaceTempWithQuery {
    
        private int _width;
        private int _higth;
    
        //before replace
        public double getPrice()
        {
            int area = _width * _higth;
            double discount;
            if (area > 1000) discount = 0.9;
            else discount = 1;
            return area * discount;
        }
    
        //after replace
    
        public double getPriceAdvanced(){
            return getArea() * getDiscount();
        }
    
        public double getArea(){
            return _width * _higth;
        }
    
        public double getDiscount(){
            if(getArea()>1000) return 0.9;
            else return 1;
        }
    }
  • 相关阅读:
    安全加固3-加固
    Centos7 64位 -- glibc-2.29 编译升级方法(已成功)
    Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法
    系统引导修复,grub2下的各种骚作
    linux 升级 5.0.2内核
    kvm虚拟化二: 字符界面管理及 无人值守安装
    kvm虚拟化一: 图形化的管理方式
    Linux rhel7 无线网络配置
    虚拟化简介
    requests模块使用二
  • 原文地址:https://www.cnblogs.com/newbee0101/p/11970405.html
Copyright © 2011-2022 走看看