`
irican
  • 浏览: 32450 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Composing Methods

阅读更多
Extract Method
这个不难,用eclipse就可以解决大部分问题。需要注意的有几点:
1.有局部变量的情况,要作为参数传入目标函数
2.对局部变量再赋值,要将新值作为目标函数的返回值
3.如果目标函数需要返回多个值,则把它拆开,确保一个函数返回一个值

Inline Method
和Extract Method相反,在以下几种情况使用:
1.函数体极少(一行?),而且与函数名一样清晰易懂
2.有一堆组织不合理的小函数,需要inline到一个大函数中,然后在Extract Method
3.无用的间接层

Inline Temp
作为Replace Temp with Query的一部分使用,把对无用临时变量的赋值去除

Replace Temp with Query
太多的临时变量会造成无法Extract Method(原因应该是参数太多),所以这个步骤可能是在Extract Method前必不可少的。前提是临时变量只被赋值一次。如果赋值了多次,就用Split Temporary Variable或Separate Query from Modifier,确保它被赋值一次。

Introduce Explaining Variable
一个表达式可能很长,很难读懂。这时候引入用于解释的临时变量。在较长的算法中,也可以引入临时变量解释每一步的意义。注意:如果可以用Extract Method就不用Introduce Explaining Variable。仅当Extract Method难以进行时用。

Split Temporary Variable
一个临时变量只能承担一个责任。如果承担了多个责任,则需要引入另外的临时变量达到这个要求。

Remove Assignments to Parameters
与Split Temporary Variable类似,参数只表示“被传递进来的东西”。对参数赋值不会改变原引用的内容,只会使程序更加混乱。修改方法是给参数加final,但是一般情况下不必把所有参数都强制加final。

Replace Method with Method Object
当一个大型函数无法Extract Method时,可以尝试这种方法。主要原则是把大型函数中所有的临时变量都作为field放入一个新的class中。由于field可以被所有method使用,所以可以在该class内顺利的进行Extract Method,而不用在方法间传递参数。引入一个class,只包含一个函数,并通过构造函数把所有的参数传入,并赋值到field中。原先的函数仅起到一个delegate的作用。

Substitute Algorithm
这个方法让我匪夷所思,感觉就是不改变函数的任何外部行为的情况下,修改函数的内部实现。感觉叫替换函数的实现方式好像更准确些。对于这个重构方法,单元测试至关重要。
分享到:
评论

相关推荐

    重构_改善既有代码的设计

    第 6 章:重新组织你的函数(Composing Methods) 第 7 章:在对象之间移动特性(Moving Features Between Objects) 第 8 章:重新组织你的数据(Organizing Data) 第 9 章:简化条件表达式(Simplifying...

    composing-methods

    在Python编程语言中,"composing methods" 是一种重要的设计原则,它涉及到如何将小的、独立的功能组合成更大的、复杂的功能。这种方法鼓励模块化和可重用的代码,使得程序更加灵活且易于维护。本篇文章将深入探讨...

    重构-改善既有代码的设计+中文版

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构——改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构-改善既有代码的设计(中文版)

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构,改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce ...

    重构 改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce ...

    Refactoring

    The heart of the book is a catalog of refactorings, organized in chapters on composing methods, moving features between objects, organizing data, simplifying conditional expressions, and dealing with...

    Image Embedding of PMU Data for Deep Learning towards Transient Disturbance

    A real synchrophasor set composing of three different types of disturbance events from the Frequency Monitoring Network (FNET) is used. An image embedding technique called Gramian Angular Field is ...

    JavaScript.Application.Design.A.Build.First.Approach

    Chapter 6 Understanding Asynchronous Flow Control Methods In Javascript Chapter 7 Leveraging The Model-View-Controller Chapter 8 Testing Javascript Components Chapter 9 Rest Api Design And Layered ...

    Effective Software Test Automation

    Software test engineers would like to see a fully automated software test tool on the market, one that is capable of completing testing tasks from generating test scripts and composing the testing ...

    Mastering Ansible - Second Edition

    Finally, you will discover the methods used to examine and debug Ansible operations, helping you to understand and resolve issues. By the end of the book, the readers will be able to unlock the true...

    Mastering.Ansible.178439548X

    Design, develop, and ...Chapter 5: Composing Reusable Ansible Content with Roles Chapter 6: Minimizing Downtime with Rolling Deployments Chapter 7: Troubleshooting Ansible Chapter 8: Extending Ansible

    Java in easy steps Covers Java 9 6th Edition

    特别是在Java 8中引入了默认方法(default methods)和静态方法(static methods),这些特性可以让开发者在不破坏现有实现的情况下向接口添加新的方法。这些新特性在“Interfaces”章节中可能会被讨论到。 函数式...

    C# Programming Cookbook [EPUB+MOBI+PDF]

    Generate tests from the Code Contracts for mission critical methods. Integrate code in Visual Studio with GitHub. Create a web application in Azure. Design and build a microservice architecture ...

    Python Cookbook, 2nd Edition

    Keeping References to Bound Methods Without Inhibiting Garbage Collection Recipe 6.11. Implementing a Ring Buffer Recipe 6.12. Checking an Instance for Any State Changes Recipe 6.13. Checking ...

Global site tag (gtag.js) - Google Analytics