SlideShare a Scribd company logo
1 of 50
软件重构讨论
大纲 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
前言 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
前言 ,[object Object]
面对的挑战 软件能力 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何应对? 软件能力提升 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何应对 ? ,[object Object]
如何应对? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
兵器谱之必杀技 - 重构 ,[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object]
为什么要重构 (why) ,[object Object],[object Object],[object Object],[object Object]
什么是重构 ,[object Object],[object Object],[object Object],[object Object]
什么是重构 (refacting) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
何时何地去重构 (refactoring) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
何时何地去重构 (refactoring) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
何时何地去重构 (refactoring) ,[object Object],[object Object],[object Object],[object Object],[object Object]
何时何地去重构 (refactoring) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何去重构 (refactoring) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何去重构 (refactoring)—— 包重构 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何去重构 (refactoring)—— 包重构 ,[object Object],[object Object],[object Object],[object Object]
如何去重构 (refactoring)—— 包重构 ,[object Object],各实现子模块不再有私密关系了,通过高层的接口契约实现沟通,完全做到可插拔
如何去重构 (refactoring)—— 类重构 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
如何去重构 (refactoring)— 技巧 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Extract Methods( demo1 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Extract Methods( demo2 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
方法内联化( demo )
查询替代临时变量( demo )
引入解释性变量( demo )
合并重复条件段( demo )
传递整个对象( demo )
简化条件表达式 --- 分解条件
简化条件表达式 --- 移除双重否定
重新组织你的对象 --- 提炼类
重新组织你的对象 --- 提炼接口
简化条件表达式 --- 提炼子类
重新组织你的对象 --- 提炼父类
重新组织你的对象 --- 内联类
重新组织你的对象 --- 隐藏代理 { person.getDepartment().getManager() } { person.getManager() } 不要和 陌生人说话 !
重新组织你的对象 --- 搬移类 便于重用
重新组织你的对象 --- 搬移方法
简化函数调用—分离查询与修改
讨论 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Q&A ?
讨论 ,[object Object],[object Object],[object Object]

More Related Content

Viewers also liked

Vim get start_1.0
Vim get start_1.0Vim get start_1.0
Vim get start_1.0longhao
 
借助社会化媒体的个人成长
借助社会化媒体的个人成长借助社会化媒体的个人成长
借助社会化媒体的个人成长longhao
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
并发编程实践
并发编程实践并发编程实践
并发编程实践longhao
 
无Ued产品的易用性讨论
无Ued产品的易用性讨论无Ued产品的易用性讨论
无Ued产品的易用性讨论longhao
 
Are Leaders born or made?
Are Leaders born or made?Are Leaders born or made?
Are Leaders born or made?Fizza Durrani
 
[Stp]노스페이스바람막이1
[Stp]노스페이스바람막이1[Stp]노스페이스바람막이1
[Stp]노스페이스바람막이1eunbi0915
 
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoPadrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoThoughtworks
 
A wideband hybrid plasmonic fractal patch nanoantenn
A wideband hybrid plasmonic fractal patch nanoantennA wideband hybrid plasmonic fractal patch nanoantenn
A wideband hybrid plasmonic fractal patch nanoantennIAEME Publication
 
Enhancing presentations with slides and other visuals
Enhancing presentations with slides and other visualsEnhancing presentations with slides and other visuals
Enhancing presentations with slides and other visualsLilly Boo
 
A contribuicao epistemologica de ludwik fleck na producao academica em educac...
A contribuicao epistemologica de ludwik fleck na producao academica em educac...A contribuicao epistemologica de ludwik fleck na producao academica em educac...
A contribuicao epistemologica de ludwik fleck na producao academica em educac...Augusto Santana
 
Catálogo BEEP Complementos 2014
Catálogo BEEP Complementos 2014Catálogo BEEP Complementos 2014
Catálogo BEEP Complementos 2014Beep Informática
 

Viewers also liked (18)

hadoop
hadoophadoop
hadoop
 
Vim get start_1.0
Vim get start_1.0Vim get start_1.0
Vim get start_1.0
 
借助社会化媒体的个人成长
借助社会化媒体的个人成长借助社会化媒体的个人成长
借助社会化媒体的个人成长
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
并发编程实践
并发编程实践并发编程实践
并发编程实践
 
无Ued产品的易用性讨论
无Ued产品的易用性讨论无Ued产品的易用性讨论
无Ued产品的易用性讨论
 
Grasp
GraspGrasp
Grasp
 
Are Leaders born or made?
Are Leaders born or made?Are Leaders born or made?
Are Leaders born or made?
 
[Stp]노스페이스바람막이1
[Stp]노스페이스바람막이1[Stp]노스페이스바람막이1
[Stp]노스페이스바람막이1
 
Journalism 2.0
Journalism 2.0Journalism 2.0
Journalism 2.0
 
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo SatoPadrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
Padrões de deploy para DevOps e Entrega Contínua, por Danilo Sato
 
Una Navidad sin intereses
Una Navidad sin interesesUna Navidad sin intereses
Una Navidad sin intereses
 
Ppt0000000
Ppt0000000Ppt0000000
Ppt0000000
 
A wideband hybrid plasmonic fractal patch nanoantenn
A wideband hybrid plasmonic fractal patch nanoantennA wideband hybrid plasmonic fractal patch nanoantenn
A wideband hybrid plasmonic fractal patch nanoantenn
 
Enhancing presentations with slides and other visuals
Enhancing presentations with slides and other visualsEnhancing presentations with slides and other visuals
Enhancing presentations with slides and other visuals
 
GBI
GBIGBI
GBI
 
A contribuicao epistemologica de ludwik fleck na producao academica em educac...
A contribuicao epistemologica de ludwik fleck na producao academica em educac...A contribuicao epistemologica de ludwik fleck na producao academica em educac...
A contribuicao epistemologica de ludwik fleck na producao academica em educac...
 
Catálogo BEEP Complementos 2014
Catálogo BEEP Complementos 2014Catálogo BEEP Complementos 2014
Catálogo BEEP Complementos 2014
 

Similar to 软件重构

Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
Grails敏捷项目开发
Grails敏捷项目开发Grails敏捷项目开发
Grails敏捷项目开发Michael Yan
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發AgileCommunity
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿jndream
 
软件工程
软件工程软件工程
软件工程bill0077
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
imobile-beta技术沙龙
imobile-beta技术沙龙imobile-beta技术沙龙
imobile-beta技术沙龙posestudio
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
Frank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank Lee
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用建興 王
 

Similar to 软件重构 (20)

Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Grails敏捷项目开发
Grails敏捷项目开发Grails敏捷项目开发
Grails敏捷项目开发
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿
 
软件工程
软件工程软件工程
软件工程
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
imobile-beta技术沙龙
imobile-beta技术沙龙imobile-beta技术沙龙
imobile-beta技术沙龙
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
Frank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testingFrank‘s Learning Summary - Agile testing
Frank‘s Learning Summary - Agile testing
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用