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 e) {
            e.printStackTrace();
        }
    }

/

    private ServerSocket createServerSocket(final int port) throws IOException {
        ServerSocket result = new ServerSocket(port);
        return result;
    }

    private void printPrompt(final String prompt) {
        System.out.println(prompt);
    }

    private void startWorking(final ServerSocket serverSocket) throws IOException {
        while (true) {
            Socket socket = serverSocket.accept(); // 关于引用放 while外面还是里面有激烈的争论,我的结论是放里面。
            createServerThread(socket);
        }
    }

    public void startup() {
        try {
            ServerSocket serverSocket = createServerSocket(PORT);
            printPrompt("The server is listening on " + PORT + " port ...");
            startWorking(serverSocket);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Note

为什么要 Extract Method?主要体现在“可读性”和“代码复用”上:

  1. 函数的粒度越小被复用的机会越大
  2. 免去写注释,因为代码读起来就像是一系列注释
  3. 如果函数都是细粒度,方便覆写(ps.这条不理解)

Extract Method 的手段:

  1. 直接提取一段代码。(用一个方法代替注释)
  2. 把局部变量作为参数传递给方法。
  3. 把对局部变量的操作转化为一个查询。(类似于 getOutputcreateXxx

原文地址:https://www.cnblogs.com/xkxf/p/8275125.html

时间: 2024-08-28 02:40:21

Refactoring #001 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,抽取成一个独立的小函数. 我个人来说也很喜欢短小函数,因为他们代表了高强度的复用与灵活性.对于短小函数来说最最关键的就是短小函数的命名,其实你就是给了这些短小函数自我解释的机会,所以你如果给这些短小函数起一个接近其语义的名字,那当你读起长函数来说,就像是阅读

extract method(重新组织函数)

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

重构第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 - 提取方法

以获取一个商品的价格为例:如果用户已登录并且是vip,得到vip价,否则正常价: 处理前: public function getPrice() { if (Auth::user()) { $userId = Auth::user()->UserID; $customerIds = $this->supplier->customers->map(function ($item) { return $item->format(['customer_id']); })->t

TDD学习笔记【三】---是否需针对非public方法进行测试?

前言 在Visual Studio 2012 中,针对Unit Test 的部分,有一个重要的变动: 原本针对「测试对象非public 的部分」,开发人员可通过Visual Studio 2010 自动产生的accessor ??来进行测试.但在Visual Studio 2012 中,将此功能移除了. Accessor ??其背后的原理,是将对象通过很「脏」的反射方式,把对象内所有的东西public 出来.并且Visual Studio 在更新对象后,进行与设计测试时,会帮你做同步产生acce

Building Maintainable Software-java篇之Write Short Units of Code

Building Maintainable Software-java篇之Write Short Units of Code Any fool can write code that a computer can understand. Good programmers write code that humans can understand. -Martin Fowler Guideline: ? Limit the length of code units to 15 lines of c