SlideShare ist ein Scribd-Unternehmen logo
1 von 85
Downloaden Sie, um offline zu lesen
寻找适合重构的理论
GhostZhang(张癸鑫)	
  
2014.12.27
@GhostZhang
个⼈人简历
2006.11~2009.09
2009.9~2010.11
2010.11~2011.1
2011.1~now
@GhostZhang
2006.5
2007.12
@GhostZhang
2009年《⼀一专多⻓长》
@TwinsenLiang
@GhostZhang
2012年《⽅方》
专注
⾃自我定位
换个⾓角度看问题
拒绝理所当然
@GhostZhang
传承
@GhostZhang
寻找适合重构的理论
@GhostZhang
跨界的理论
单元测试⾯面向对象
模块化
@GhostZhang
1. Qzone模块化演化过程	
  
2. 财付通⽀支付中⼼心多场景应⽤用尝试
@GhostZhang
Askin Bskin Cskin Dskin
Qzone换肤问题
<link	
  href=“h9p://imgcache.qq.com/qzone/skin/A.css”	
  rel="stylesheet">
<link	
  href=“h9p://imgcache.qq.com/qzone/skin/B.css”	
  rel="stylesheet">
<link	
  href=“h9p://imgcache.qq.com/qzone/skin/C.css”	
  rel="stylesheet">
<link	
  href=“h9p://imgcache.qq.com/qzone/skin/D.css”	
  rel="stylesheet">
…
@GhostZhang
如何减少维护⼯工作量?
问题
或质疑
假设
⽅方案
验证
⽅方案
@GhostZhang
12
34
@GhostZhang
模块化
模块化
• ⼤大拆⼩小
• 可复⽤用
• 可组合
@GhostZhang
拆——分离的思想
@GhostZhang
Qzone换肤架构演化
Acss Bcss Ccss DcssAcss Bcss Ccss Dcss
Askin Bskin Cskin Dskin
@GhostZhang
Qzone换肤架构演化
Acss Bcss Ccss Dcss
Acss Bcss Ccss Dcss
Askin Bskin Cskin Dskin
表现
结构 相同
@GhostZhang
Qzone换肤架构演化
Acss Bcss Ccss Dcss
AcssBcssCcssDcss
Askin Bskin Cskin Dskin
Gcss
表现
结构
@GhostZhang
模块的演化
A
B
我是⻚页⾯面
@GhostZhang
模块的演化
A
B
A
B
@GhostZhang
模块的演化
A
B
A
B
Acss
Bcss
Ahtml
Ahtml
@GhostZhang
模块的演化
A
B
A
B
Acss
Bcss
Gcss
Ahtml
Ahtml
@GhostZhang
新闻
专辑
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
其它
其它
@GhostZhang
新闻
专辑
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
@GhostZhang
专辑
新闻
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
@GhostZhang
新闻
专辑
专辑名称
专辑介绍,这是⼀一
张专辑,这⾥里写⼀一
些关于这张专辑的
介绍内容,让⽤用户
更容易选择。
img
新闻标题
新闻内容新闻内容新闻内容新闻内容新
闻内容新闻内容
@GhostZhang
标题
标题
width
height
@GhostZhang
width height
标题标题
基础模块
基础结构
基础表现
Acss
Bcss
Ghtml
Gcss
最终位置
最终表现
@GhostZhang
拆好了,如何拼?
@GhostZhang
模块如何拼接?
问题
或质疑
假设
⽅方案
验证
⽅方案
@GhostZhang
@GhostZhang
⾯面向对象
• 独⽴立对象
• 通过接⼝口链接
⾯面向对象
@GhostZhang
独⽴立——分离的思想
CSS
HTML
JS
@GhostZhang
接⼝口
<link	
  type="text/css"	
  href="demo.css"	
  rel=“stylesheet"	
  />
<style	
  type=“text/css">	
  
.demo{}	
  
</style>
<div	
  class=“demo”>	
  
…	
  
</div>
<div	
  style=“color:#333333;”>	
  
…	
  
</div>
⽂文件接⼝口
代码接⼝口
@GhostZhang
“代码接⼝口”的设计
@GhostZhang
“代码接⼝口”的设计
• 保持接⼝口两端的独⽴立性	
  
• 更少的变更成本
@GhostZhang
标题
基础模块
最终位置
最终表现width height
基础结构
基础表现
Ghtml
Acss
Bcss
Gcss
@GhostZhang
标题
Acss
Gcss
<div	
  class=“	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ”>	
  
…	
  
</div>
width height
Bcss
代码接⼝口
@GhostZhang
标题
Acss
Gcss<div	
  class=“	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ”>	
  
…	
  
</div>
width height
Bcss
新闻
代码接⼝口
@GhostZhang
<div	
  class=“	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ”>	
  
…	
  
</div>
标题
AcssGcss
width height
新闻
代码接⼝口
专辑
@GhostZhang
标题
width height
新闻
专辑
+ =
Acss
Bcss
A
B
Ghtml Gcss
@GhostZhang
<div	
  class=“基础类	
  扩展类	
  实例类”>	
  
var	
  实例类	
  =	
  new	
  基础类(扩展类)
Gcss Acss
♒
@GhostZhang
标题
扩展类
标题
Gcss 局部调整 Ecss
标题
@GhostZhang
模块样式
@GhostZhang
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
新闻
新闻标题
新闻内容新闻内容新闻内容新闻内容新闻内容新闻
内容 新闻内容新闻内容新闻内容新闻内容新闻内
容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新新闻内容新
闻内容新闻内容新闻内容新闻内容
@GhostZhang
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
新闻
新闻标题
新闻内容新闻内容新闻内容新闻内容新闻内容新闻
内容 新闻内容新闻内容新闻内容新闻内容新闻内
容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新新闻内容新
闻内容新闻内容新闻内容新闻内容
@GhostZhang
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
新闻
新闻标题
新闻内容新闻内容新闻内容新闻内容新闻内容新闻
内容 新闻内容新闻内容新闻内容新闻内容新闻内
容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新新闻内容新
闻内容新闻内容新闻内容新闻内容
@GhostZhang
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
新闻
新闻标题
新闻内容新闻内容新闻内容新闻内容新闻内容新闻
内容 新闻内容新闻内容新闻内容新闻内容新闻内
容新闻内容
新闻标题
新闻内容新闻内容新闻内容新闻内容新新闻内容新
闻内容新闻内容新闻内容新闻内容
@GhostZhang
OOCSS?
@GhostZhang
⾯面向“效果”的模块化
@GhostZhang
⾯面向“效果”的模块化
• 以表现为模块划分的参考标准	
  
• 以最⼤大复⽤用为基础模块的参考标准	
  
• 保持模块的独⽴立性及模块内部的灵活性
@GhostZhang
⾯面向“效果”的模块化
<div	
  class=“基础类	
  扩展类	
  实例类”>
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
@GhostZhang
⾯面向“对象”的模块化,像是玩积⽊木
⾯面向“效果”的模块化,
像是做积⽊木
@GhostZhang
Ascene Bscene Cscene Dscene
财付通⽀支付中⼼心	
  
多场景问题
…
⽀支付中⼼心
不同商家接⼊入的需求存在差异
@GhostZhang
HTML能否模块化?
问题
或质疑
假设
⽅方案
验证
⽅方案
@GhostZhang
SHTML
<!-­‐-­‐#include	
  virtual=“head.html"-­‐-­‐>
body
head
footer <!-­‐-­‐#include	
  virtual=“footer.html"-­‐-­‐>
@GhostZhang
SHTML
<!-­‐-­‐#include	
  virtual=“cbox.html"-­‐-­‐>
<!-­‐-­‐#include	
  virtual=“abox.html"-­‐-­‐>
<!-­‐-­‐#include	
  virtual=“bbox.html"-­‐-­‐>
框架
Abox
Bbox
Cbox
@GhostZhang
SHTML
Abox
Bbox
Cbox
Abox
Cbox
@GhostZhang
SHTML
Abox
Bbox
Cbox
Abox
Cbox
Abox
Bbox
Cbox
Abox
Cbox
@GhostZhang
SHTML
Abox Bbox Cbox
Abox
Cbox
Abox
Bbox Bbox
Cbox
…
…
@GhostZhang
@GhostZhang
@GhostZhang
@GhostZhang
@GhostZhang
静态⻚页⾯面的输出要求
• 还原设计稿	
  
• 兼容多个浏览器
@GhostZhang
重构输出如何做得更好?
问题
或质疑
假设
⽅方案
验证
⽅方案
@GhostZhang
做得更好
静态 动态
@GhostZhang
单元测试
单元测试
• 快速⾃自测
• 辅助测试
• 模拟真实
@GhostZhang
快速添加交互效果
• 显⽰示/隐藏	
  
• 状态切换	
  
• Tab选项卡	
  
• 弹出层	
  
• 聚焦	
  
• 列表⾼高亮
@GhostZhang
快速添加交互效果
@GhostZhang
辅助验证 Demo
@GhostZhang
做得更好
静态 动态
验证环境
@GhostZhang
验证环境
@GhostZhang
SHTML的烦恼
<!-­‐-­‐#include	
  virtual=“head.html"-­‐-­‐>head
footer <!-­‐-­‐#include	
  virtual=“footer.html"-­‐-­‐>
A
B
<!-­‐-­‐#include	
  virtual=“a.html"-­‐-­‐>
<!-­‐-­‐#include	
  virtual=“b.html"-­‐-­‐>
@GhostZhang
SHTML的烦恼
• SHMTL是包含有“服务器端嵌⼊入”命令的HTML	
  
• ⾮非静态⻚页⾯面会⾯面临各种不稳定的环境问题	
  
• 下游未完成	
  
• 环境报错,流程⾛走不下去	
  
• ……
@GhostZhang
Fiddler	
  
+	
  
SSI	
  Proxy
@GhostZhang
@GhostZhang
@GhostZhang
@GhostZhang
@GhostZhang
跨界的理论
单元测试⾯面向对象
模块化
@GhostZhang
⾯面向“效果”的模块化
<div	
  class=“基础类	
  扩展类	
  实例类”>
.基础类	
  
.扩展类	
  
.实例类
.作⽤用域 .⺫⽬目标元素 {…}
h`p://blog.cssforest.org/
@GhostZhang
重构的单元测试
h`p://cd.tenpay.com/labs/
@GhostZhang
互为肩膀,共同成⻓长
@GhostZhang
Thank	
  &	
  End

Weitere ähnliche Inhalte

Andere mochten auch

WTF - What's The Future of Disruption in Travel?
WTF - What's The Future of Disruption in Travel?WTF - What's The Future of Disruption in Travel?
WTF - What's The Future of Disruption in Travel?Stephenie Rodriguez
 
Shopper marketing for luxury brands in travel retail
Shopper marketing for luxury brands in travel retailShopper marketing for luxury brands in travel retail
Shopper marketing for luxury brands in travel retailPhilip Slade
 
Retail Travel Business Strategy - Panorama Tour Indonesia
Retail Travel Business Strategy - Panorama Tour IndonesiaRetail Travel Business Strategy - Panorama Tour Indonesia
Retail Travel Business Strategy - Panorama Tour IndonesiaWidodo Heru Santoso
 
Web前端性能优化 2014
Web前端性能优化 2014Web前端性能优化 2014
Web前端性能优化 2014Yubei Li
 
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例Kuro Hsu
 
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践美团点评技术团队
 
美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术团队
 
智能合約結合區塊鏈簡介
智能合約結合區塊鏈簡介智能合約結合區塊鏈簡介
智能合約結合區塊鏈簡介Nicholas Lin
 
AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得Cliff Chao-kuan Lu
 
以AWS Lambda與Amazon API Gateway打造無伺服器後端
以AWS Lambda與Amazon API Gateway打造無伺服器後端以AWS Lambda與Amazon API Gateway打造無伺服器後端
以AWS Lambda與Amazon API Gateway打造無伺服器後端Amazon Web Services
 
AWS電商和零售業解決方案介紹
AWS電商和零售業解決方案介紹AWS電商和零售業解決方案介紹
AWS電商和零售業解決方案介紹Amazon Web Services
 
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50FITCH
 

Andere mochten auch (12)

WTF - What's The Future of Disruption in Travel?
WTF - What's The Future of Disruption in Travel?WTF - What's The Future of Disruption in Travel?
WTF - What's The Future of Disruption in Travel?
 
Shopper marketing for luxury brands in travel retail
Shopper marketing for luxury brands in travel retailShopper marketing for luxury brands in travel retail
Shopper marketing for luxury brands in travel retail
 
Retail Travel Business Strategy - Panorama Tour Indonesia
Retail Travel Business Strategy - Panorama Tour IndonesiaRetail Travel Business Strategy - Panorama Tour Indonesia
Retail Travel Business Strategy - Panorama Tour Indonesia
 
Web前端性能优化 2014
Web前端性能优化 2014Web前端性能优化 2014
Web前端性能优化 2014
 
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例
漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例
 
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
 
美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡
 
智能合約結合區塊鏈簡介
智能合約結合區塊鏈簡介智能合約結合區塊鏈簡介
智能合約結合區塊鏈簡介
 
AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得AWS Solutions Architect 準備心得
AWS Solutions Architect 準備心得
 
以AWS Lambda與Amazon API Gateway打造無伺服器後端
以AWS Lambda與Amazon API Gateway打造無伺服器後端以AWS Lambda與Amazon API Gateway打造無伺服器後端
以AWS Lambda與Amazon API Gateway打造無伺服器後端
 
AWS電商和零售業解決方案介紹
AWS電商和零售業解決方案介紹AWS電商和零售業解決方案介紹
AWS電商和零售業解決方案介紹
 
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50
Retail 2020: Retail Will Change more in the Next 5 Years than the Last 50
 

Ähnlich wie 2014WebRebuild年会分享

Browser Object Model
Browser Object ModelBrowser Object Model
Browser Object Modeljay li
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)ziggear
 
五行完成網頁多國語系
五行完成網頁多國語系五行完成網頁多國語系
五行完成網頁多國語系amostsai
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與cssAaron King
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 
电子杂志(试刊)
电子杂志(试刊)电子杂志(试刊)
电子杂志(试刊)ProCharm
 

Ähnlich wie 2014WebRebuild年会分享 (10)

Browser Object Model
Browser Object ModelBrowser Object Model
Browser Object Model
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
 
五行完成網頁多國語系
五行完成網頁多國語系五行完成網頁多國語系
五行完成網頁多國語系
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
網頁三本柱之Html與css
網頁三本柱之Html與css網頁三本柱之Html與css
網頁三本柱之Html與css
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
 
电子杂志(试刊)
电子杂志(试刊)电子杂志(试刊)
电子杂志(试刊)
 

2014WebRebuild年会分享