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
?主要体现在“可读性
”和“代码复用
”上:
- 函数的粒度越小被复用的机会越大
- 免去写注释,因为代码读起来就像是一系列注释
- 如果函数都是细粒度,方便覆写(ps.这条不理解)
Extract Method
的手段:
- 直接提取一段代码。(用一个方法代替注释)
- 把局部变量作为参数传递给方法。
- 把对局部变量的操作转化为一个查询。(类似于
getOutput
,createXxx
)
Refactoring #001 Extract Method的更多相关文章
- VS Extract Method
前言 看重构6.4Replace Temp with Query(以查询取代临时变量)中提到Replace Temp with Query往往是你运用Extract Method之前必不可少的一个步骤 ...
- 如何在eclips下将一段代码抽取为方法Extract Method
最近读了读关于重构的文章,做了个小总结(在编程思想目录下<从文章"避免复制与粘贴"到文章"Extract Method"的反思 系列>). 然后因为 ...
- 从文章"避免复制与粘贴"到文章"Extract Method"的反思(3)
在牛人的博客中提到了..如果你的代码可以copy-past的时候,那么久证明你的代码出现了重复.而这种重复仅仅是虚假的代码行的增加而不是像其他的代码复用那样降级成本. copy-pase代码意味着你违 ...
- 从文章"避免复制与粘贴"到文章"Extract Method"的反思(1)
看了一个比我牛的人的博客园的博文"避免复制和粘贴".里面提到了重构手法Extract Method. 所以又搜了一下Extract Method. 这里先自我理解Extract ...
- 『重构--改善既有代码的设计』读书笔记----Extract Method
在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...
- Refactoring #002 Inline Method
Example private ServerSocket createServerSocket(final int port) throws IOException { ServerSocket re ...
- 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)
背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner() ...
- extract method
函数 简短,命名良好 函数名描述的是做什么 而不是怎么做 行数过高的代码中 将一大段做一个事的代码提取到独立的method 中 高层函数直接引用. 创建新函数 将提炼的代码平移到目标函数中 检查是否引 ...
- 重构13天 抽取方法对象(Extract Method Object)
理解:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性. 详解:如下代 ...
随机推荐
- windows下配置VisualSVN Server服务器
下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:TortoiseSVN-1.5.5.14361-win32-svn-1.5.4 上面是我使用的版本. 在V ...
- c++11实现l延迟调用(惰性求值)
惰性求值 惰性求值一般用于函数式编程语言中,在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在后面的某个时候求值. 可以利用c++11中的std::function, lam ...
- poj_1190 树状数组
题目大意 给定一个S*S的矩形,该矩形由S*S个1x1的单元格构成,每个单元格内可以放一个整数,每次有如下可能操作: (1)改变某个单位单元格中的数的大小 (2)查询由若干个连续单元格构成的X*Y的大 ...
- flag - 待浏览学习网站
学习:gulp+jade(pug)+sass 待浏览网站如下:http://www.ydcss.com/archives/18#lesson1 https://nodejs.org/en/ https ...
- poj2096 Collecting Bugs[期望dp]
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 5394 Accepted: 2670 ...
- WEB安全番外第二篇--明日之星介绍HTML5安全问题介绍
一.CORS领域问题: 1.CORS的介绍请参考:跨域资源共享简介 2.HTML5中的XHR2级调用可以打开一个socket连接,发送HTTP请求,有趣的是,上传文件这里恰恰是multi-part/f ...
- AB压力测试工具
1.安装AB工具: yum install httpd-tools 2.测试: ab -n -c http://localhost.com/ 其中-n表示请求数,-c表示并发数 3.测试结果 [roo ...
- pythonMD5加密
#MD5加密def md5_key(arg): hash = hashlib.md5() hash.update(arg) return hash.hexdigest()
- 微信小程序 --- 拨打电话
拨打电话:wx.makePhoneCall btnclick:function(){ wx.makePhoneCall({ phoneNumber:'12580' }); }
- 手机相册管理(gallery) ---- HTML5+
模块:gallery Gallery模块管理系统相册,支持从相册中选择图片或视频文件.保存图片或视频文件到相册等功能.通过plus.gallery获取相册管理对象. 管理我们手机上用到的相册:选择图片 ...