extract method - 提取方法

以获取一个商品的价格为例:如果用户已登录并且是vip,得到vip价,否则正常价;

处理前:

    public function getPrice()
    {
        if (Auth::user()) {
            $userId = Auth::user()->UserID;
            $customerIds = $this->supplier->customers->map(function ($item) {
                return $item->format([‘customer_id‘]);
            })->toArray();
            $customerIds = array_column($customerIds, ‘customer_id‘);
            if (in_array($userId, $customerIds))//如果是vip,获得优惠价
                return self::getVIPPrice();
        }
        return self::getNormalPrice();
    }

处理后:

    public function getPrice()
    {
        if (self::isVIP())
                return self::getPartnerPrice();
        return self::getNormalPrice();
    }

    public function isVIP()
    {
        if (Auth::user()) {
            $userId = Auth::user()->UserID;
            $customerIds = $this->supplier->customers->map(function ($item) {
                return $item->format([‘customer_id‘]);
            })->toArray();
            $customerIds = array_column($customerIds, ‘customer_id‘);
            if (in_array($userId, $customerIds))
                return true;
        }
        return false; 

当然,getNormalPrice 和 getPartnerPrice 也是使用了同样的处理;

通过这种手法,代码不仅变得易读,而且更容易复用;

ps:这种做法很简单,但以前很少用,因为觉得不需要复用;其实主要目的是代码易读,复用倒是其次

时间: 2024-08-10 00:07:06

extract method - 提取方法的相关文章

Extract Method

[Extract Method]

重构改善既有代码设计--重构手法01:Extract Method (提炼函数)

背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner(); //print details Console.WriteLine("name:"+_name); Console.WriteLine("amount:"+_amount); } void PrintOwing(double amount) { PrintBanne

读书笔记-重构方法之一:提炼方法(Extract Method)

第六章 重新组织你的函数 6.1  Extract Method(提炼方法) 对付过长函数,一般重要的重构方法就是Extract Method,他把一段代码从原先的函数中提取出来,放在单独的函数中.简洁而清晰,短小而精炼. 1 void printOwing (douoble amount) 2 { 3 printBanner(); 4 //print details 5 System.out.println(“name:”+_name); 6 System.out.println(“amoun

『重构--改善既有代码的设计』读书笔记----Extract Method

在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处理长函数--Extract Method,抽取成一个独立的小函数. 我个人来说也很喜欢短小函数,因为他们代表了高强度的复用与灵活性.对于短小函数来说最最关键的就是短小函数的命名,其实你就是给了这些短小函数自我解释的机会,所以你如果给这些短小函数起一个接近其语义的名字,那当你读起长函数来说,就像是阅读

Refactoring #001 Extract Method

Example public void startup() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(10000); System.out.println("The server is listening on 10000 port ..."); while (true) { serve(serverSocket.accept()); } } catch (IOException

重构第10天:提取方法(Extract Method)

理解:经常写的代码中,有一些计算逻辑比较复杂的方法,写下来一个很长很长的方法,我们可以把这个方法,根据功能,分解成单独的几个小方法.这样做不仅能够增加代码的可维护性,而且增加了易读性. 详解: 重构前代码: 1 public class Receipt 2 { 3 private IList<decimal> Discounts { get; set; } 4 private IList<decimal> ItemTotals { get; set; } 5 6 public de

extract method(重新组织函数)

最常用的重构手法之一,当我们需要一段注释才能看明白一个函数,或者一个函数过长时,就需要将这段代码放到一个新的函数中去. 做法: 构造一个以函数意图命名的方法 讲需要提炼的代码复制到这个函数中 检查提炼的代码是否引用了作用于限于原函数的field或者method,如果有,将其声明为临时变量. 检查被提炼的代码是否修改了局部变量,如有则可以将被提炼代码处理为一个查询,或者使用split temporary value或者replace temp with query处理,并将这些局部变量传给目标函数

Android Studio各种快捷功能及好用的插件

转载:http://www.jianshu.com/p/c439605a4364 概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Postfix completion Postfix completion 是IntelliJ IDEA很早就有的功能,该功能基于已经输入的表达式和你添加的后缀来实现另一个你想要的表达式.例如在布尔表达式之后加上后缀if

Android Studio 快速开发

概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Postfix completion 介绍 Postfix completion 是IntelliJ IDEA很早就有的功能,该功能基于已经输入的表达式和你添加的后缀来实现另一个你想要的表达式.例如在布尔表达式之后加上后缀if就是if语句 . 常用后缀介绍 下面介绍一下个人工作中觉得比较常用的几个后缀