重构2-Move Method(方法移动)】的更多相关文章

现在就重构来说是非常普通的,虽然我们经常会漏掉或忽略一些需要重构的地方.方法搬移,正如所定义的那样,把方法搬移到更适合他的位置.让我们看看下面这一段重构前的代码: 理解:方法搬移,正如所定义的那样,把方法搬移到更适合他的位置. 详解:如果一个类中某个方法,经常被其他类使用(比自身使用的次数还多),或者这个方法本身不适合这个类,可以考虑把这个方法搬移到更适合他的类中. public class BankAccount { public BankAccount(int accountAge, int…
明确函数所在类的位置是很重要的.这样可以避免你的类与别的类有太多耦合.也会让你的类的内聚性变得更加牢固,让你的整个系统变得更加整洁.简单来说,如果在你的程序中,某个类的函数在使用的过程中,更多的是在和别的类进行交互,调用后者或者被后者调用,那么你就要注意了,你要去判断这个类是否真正适合他原来所在的类. 简单来说,这套手法就是在该函数最常引用的新类中建立一个有着类似行为的新函数,让旧函数变成一个单纯的委托函数或者完全删掉. Move Method是重构理论的支柱.如果一个类的责任太多,或者一个类和…
理解:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性. 详解:如下代码所示,Order 类中的Calculate方法要完成很多功能,在之前我们用“提取方法”来进行重构,现在我们采取“提取方法对象”来完成重构. 重构前代码: using System; using System.Collections.Generic; using System.Linq; using…
;(function() { /** * 在Function对象上扩展method方法 * @param {String} name 扩展的方法名称 * @param {Function} callback 方法的定义 * @return {Function} return this 提供链式调用 */ if(typeof Function.prototype.method !== 'function'){ Function.prototype.method = function(name, c…
一般地,熟悉VB.VC的同学都知道,要将新增的excel表单添加到表单的末尾,是很简单的事情,直接调用Add函数,传入对应的函数形参,就能实现将新增表单插入到末尾,但是通过QT的QAxObject实现appendSheet()却不是那么容易的事情,因为上述的Add函数不奏效,经过多次试验尝试,发现通过Add函数新增的表单只能插入到某一表单的前面,而不能添加到表单的尾部,那怎么办呢?我这里采用了一种Add + Move的方法,实现appendSheet的功能,也就是通过Add新增一个sheet,然…
蝴蝶书中有一个method方法,用来给函数定义方法.看了之后,想着能不能给对象也定义方法呢?. 下面的代码可以实现给函数定义方法: //Function method Function.prototype.method = function (name,func) { this.prototype[name] = func; return this; } 在实现给对象定义方法的过程中,我遇到了一些问题,对象是没有prototype的. 经过思考,用下面的方法实现了给对象定义方法的功能,但是比较繁…
很多文章在讲一个表单多个提交方法的时候都是在<s:submit>中通过method来指定,但是我在试验中怎么也不对,jsp页面代码如下 <%@page import="org.apache.naming.java.javaURLContextFactory"%> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding…
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的. 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成<Java虚拟机原理图解> 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助.…
android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设备上,相同的代码,相同的方法,就是执行不起来.大概方法就是上层写一个apk,调用一个静态的java库,java库载入调用JNI的库文件,这一套代码在4.2上都是好好的,正常能跑,移到4.4上编译也都没有问题,执行会出以下的问题: /***************************************…
12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This method is part of the Piece class and returns whether or not the piece can move to position (x, y). Explain howyou would test this method. 这道题让我们测试象棋游戏中的移动…
上移方法(Pull Up Method)重构是将方法向继承链上层迁移的过程.用于一个方法被多个实现者使用时 public abstract class Vehicle { // other methods}public class Car extends Vehicle{ public void Turn (Direction direction){ // code here}}public class Motorcycle extends Vehicle {}public enum Direc…
我们介绍了将方法迁移到基类以供多个子类使用的上移方法重构,今天我们来看看相反的操作.重构前的代码如下: public abstract class Animal { public void Bark() { // code to bark}}public class Dog extends Animal{} public class Cat extends Animal{} 这里的基类有一个Bark方法.或许我们的猫咪们一时半会也没法学会汪汪叫(bark),因此Cat类中不再需要这个功能了.尽管…
你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机:“搬移函数”是重构理论的支柱.如果一个类有太多行为,或如果一个类与另一个类有太多合作而形成高度耦合,就需要搬移函数.通过这种手段,可以使系统中的类更简单,这些类最终也将更干净利落的实现系统交付的工作. 浏览类的所有函数,从中找出这样的函数:使用另一个对象的次数比使用自己所驻对象的次数还多.一旦移动了…
1. 重构 面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”指的是那些可以满足 “应对变化,提高复用”的设计. 设计模式的要点是“寻找变化点,然后在变化点处应用设计模式,从而更好地理解需求的变化” “什么时候.什么地点应设计模式”比“理解设计模式结构本身”更为重要. 设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用.没有一部到位 的设计模式.敏捷软件开发提倡“Refactoring to Patterns”是目前普遍公认的最好的使用 设计模式的方法. 2 重…
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对lua中的常用方法特定编写,从而实现对table的重构. table中关键的一点是使用setmetatable和getmetatable,分别是对table进行元表设置和读取. 一.lua中table的元方法 table中的元方法主要分为算术类和关系类的元方法,算数类元方法可以分为:加(_add).减…
Go没有类似python语言中类class的概念,但依旧有method 类型方法定义格式如下 func (a mytype) method_name(x type)(y type){ return y } 调用方式: instance.method(args) -> (type).func(instance, args) 通过显示的说明Receiver(强制函数传递的第一个参数)来实现与某个类型(struct,int...)的组合 package main import "fmt"…
今天读<重构>P279, Separate Query from Modifier,将查询函数和修改函数分离. 问题的产生 突然想到 Java 的传对象作为参数的方法到底是 传引用调用,还是 传值调用?修改参数,会不会影响实参呢? 下面两个代码是不是等效的呢? //用新值覆盖旧值,并返回 public Student updateStudentInfo(Student newStudent , Student stu){ stu.sex = newStudent.sex; return stu…
你也可以说这并不是一个真正的重构,因为方法实际上改变了,但这是一个灰色地带,可以开放讨论.一个拥有大量布尔类型参数的方法将很快变得无法控制,产生难以预期的行为.参数的数量将决定分解的方法的数量.来看看该重构是如何开始的: public class BankAccount { public void CreateAccount(Customer customer, boolean withChecking, boolean withSavings, boolean withStocks) { //…
进入 // Methods bool has_final_method = false; AccessFlags promoted_flags; promoted_flags.set_flags(0); Array<Method*>* methods = parse_methods(access_flags.is_interface(), &promoted_flags, &has_final_method, &has_default_methods, CHECK_(n…
谈下function和method在内嵌与外部传参的区别 1.内嵌函数(Internal Functions) 看下现在输出&x的话会返回什么值? 2.内嵌函数(Internal Functions) 看下现在输出&x的话会返回什么值? 3.外部引用函数(External Functions) 看下现在输出&x的话会返回什么值? 4.字段类(Field Class) 看下&f.value和&g.value返回什么值? 5.原始类型(Primitives) 看下&am…
1.创建 filters.js(methods.js) 文件: 2.filters.js(methos.js) 中定义全局过滤方法: 1 export default { 2 /** 时间戳转换 */ 3 showTime (time) { 4 let date = null 5 if ((time + '').length === 10) { 6 date = new Date(time * 1000) 7 } else { 8 date = new Date(time) 9 } 10 con…
20155204 实验3<敏捷开发与XP实践>实验报告 一.实验内容与步骤 1.研究IDEA的code菜单. 老师给的任务的是把一串代码格式化,这个任务很简单.code菜单主要是关于编辑代码的一系功能,比如格式化.加注释.override等,是很实用的功能. 2.尝试给同伴的代码添加测试用例 步骤1:在同伴的码云上下载同伴的代码. 步骤2:用IDEA打开伙伴的项目,在其test文件夹中添加测试用例. 步骤3:将改动后的代码git到码云上.我认为最难的反而是这一步,我通过这一步重温了git的过程…
重构同样非常简单,以至于人们并不认为这是一个有价值的重构.迁移方法(Move Method),顾名思义就是将方法迁移到合适的位置.在开始重构前,我们先看看一下代码: ) ) return 0.03; return 0.05;}} public class AccountInterest { public BankAccount Account{get;private set ;} public AccountInterest(BankAccount account) { Account = ac…
重构第二式:搬移方法 (Refactoring 2: Move Method) 毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它是一种很有价值的重构,但事实并非如此,在最初的代码诞生之后,有些方法可能会被放在一些不合适的地方,例如,一个方法被其他类使用比在它所在的类中的使用还要频繁或者一个方法本身就不应该放在某个类中时,我们应该考虑将它移到更合适的地方.搬移方法,顾名思义就是将方法搬移至合适的位置,如将方法搬移到更频繁地使用…
第5章 重构列表 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数 6.1 (P110)Extract Method(提炼函数) 6.2 Inline Method(内联函数)117 6.3 Inline Temp(内联临时变量)119 6.4 Replace Temp with Query(以查询取代临时变量)120 6.5 Introduce Explaining Variable(引入解释性变量)124 6.6 Split T…
当你无法获得一个类的源代码或者没有权限去修改这个类的时候,你对于这种为你服务的类,你可能会出现需要别的需求的时候,比如一个Date类,你需要能够让他本身直接返回出他的后一天的对象,但他没有,这个时候你就需要暂时使用Introduce Foreign Method来做过渡,并且在适当时候通知作者把这个Foreign Method搬移到他所属于的自己的类中去. 这种情况其实也很多,特别是当你在团队当中,当有别人写了一个类的时候,你会去利用这个类去做你想要做的事情,但如果你发现这个类并没有提供你所要的…
在类与类之间搬移状态和行为,是重构过程中必不可少的步骤.很有可能在你现在觉得正常的类,等你到了下个礼拜你就会觉得不合适.或者你在下个礼拜创建了一个新的类并且你需要讲现在类的部分字段和行为移动到这个新类中.如果你发现在一个类中的某个字段,更多的被别的类的函数所使用,包括设值set和取值get函数锁取用,那么你就应该考虑搬移这个字段.当然,你也可能会去考虑是否使用Move Method去搬移这些使用这个字段的函数到这个字段的源类中去,这取决于你是否能够接受接口的变化,如果这些函数更加适合待在原地不动…
你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段.        动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系统发展,你会发现自己需要新的类,并需要将现有的工作责任拖到新的类中.在这个星期看似合理而正确的设计决策,到了下个星期可能不再正确.这没问题,如果你从来没遇到这种情况,那才有问题. 如果发现对于一个字段,在其所驻类之外的另一个类中有更多函数使用了它,就考虑搬移这个字段.上述所谓“使用”可能是通过设值/…
背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner(); //print details Console.WriteLine("name:"+_name); Console.WriteLine("amount:"+_amount); } void PrintOwing(double amount) { PrintBanne…
在线聊天项目结构图: 多用户登陆效果图: 多用户聊天效果图: 数据库效果图: 重新构建了Server类,使用了Gson方法,通过解析Json字符串,增加Info类,简化判断过程. Server类代码如下: package com.swift.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException;…