SlideShare a Scribd company logo
1 of 40
The Beauty Of Refactoring重构之美 Taobao UED 玉伯 @ Jan, 2010
祝云谦、闭月生日快乐!
Who’s this guy? 回看射雕处,千里暮云平。 Be a singer for our life. 孙玉伯是真正的男人。-- 古龙《流星·蝴蝶·剑》 http://lifesinger.org/
淘宝网上的常用 Widgets
名词解释 Tabs – 标签页,相关命名:TabView, TabControl Slide – 幻灯片 / 卡盘 / 轮播,相关命名:SlideView
2007- TBra
TBra 的解决方案 SimpleTab + SimpleSlide 优点:简单 组件完全独立,无依赖 简单易用 缺点:太简单 灵活性上有欠缺 重复代码
第一次重构:传统 OO 思路
2008 - Unicorn 2008:谈谈淘宝上常用 JS 组件的实现 PPT
2008 年的思考 面向对象,就是让代码变成有职责的生命体: Tabs 和 Slide 的共同特点: 都有导航触点 triggers  都含有一组面板 panels  通过触点可以切换面板 Slide 特有的: 可以设定为自动切换  切换时可以设定各种效果(垂直滚动、水平滚动、淡隐淡现等)
2008 年的设计
OO 方案分析 优点 分离了关注点,减少了代码重复 灵活性上有了提高 缺点 继承带来了依赖,权衡的困惑 依旧不够灵活,依旧有代码重复 不够 JavaScript
第二次重构:难以摆脱的 OO
基类
难以摆脱的 OO 方案分析 中庸之道,看起来很美 总觉得代码不够 JavaScript
第三次重构:还 JavaScript 本色
2009 - Kissy
2009 年,新的尝试 首先,代码要够 JavaScript 其次,要遵守设计模式基本原则
够 JavaScript JavaScript is NOT Java! JavaScript 是一门脚本语言,有自己的脾性。 OO 是术,不是目标。 Prototype, mixin, 条条大路通罗马。 怎么看世界,决定你怎么写代码。
设计模式 三原则: 开放 - 封闭原则 从场景进行设计 包容变化,适度灵活 两准则: 惯例优于配置 组合优于继承
再次思考……
再次思考 Tabs 和 Slide 本质上有区别吗? 原本同一物, 何必分开住? Switchable
组合优于继承 Tabs 是一个可切换的组件。    用代码表示: S.Widget(“id”).switchable();
组合优于继承 Slide 是一个可自动切换的组件。    用代码表示: S.Widget(“id”).switchable({ autoplay: true    });
组合优于继承 iGoogle 上的 Gadget 是可拖拽和可收缩的组件。用代码表示:   S.Widget(“id”).draggable()                 .collapsable();
Widget 是啥? 可以简单理解为一个 jQuery 对象 也可以复杂想象成 YUI3 的 Widget Class 在 KISSY 里,保持简单:
mixin 实现组合 JavaScript 的原型体制非常适合 mixin :   S.mix(self, Switchable.prototype, false); 具体请参考:switchable.js http://kissy.googlecode.com/svn/trunk/src/widget-switchable/
用插件分离功能点 plugin-autoplay.js plugin-effect.js plugin-circular.js plugin-lazyload.js
插件的实现机制 mixin: S.mix(Switchable.Config, {     autoplay: false,     interval: 5,     pauseOnHover: true });
插件的实现机制 AOP:     S.weave(function(){         /*…*/     }, “after”,      Switchable.prototype,     “_initSwitchable”);
Public API 很重要 Tabs.js + Slide.js   非常简单的再次封装    S.Tabs(“id”);  等价:    S.Widget(“id”).switchable({ autoplay: true    });
Public API 很重要 事件:    S.Tabs(“id”).subscribe(    “beforeSwitch”, function() {        /* … */    });
Demo http://kissy.googlecode.com/svn/trunk/src/widget-switchable/test.html
灵活性 发现 Carousel 本质上也是可切换的组件。 Carousel.js
灵活性 最简单的新闻滚动条: 稍微复杂的土豆今日焦点:
灵活性 淘宝画报、看图购 Flickr Slideshow 只要符合 switchable 可切换特性的组件,原则上都可以用 switchable 实现。 唯一限制你的是想象力。
可扩展性 plugin-wheel.js - 支持鼠标滚动切换 plugin-apple.js – 苹果切换效果 …
设计思想之关键词 组合优于继承 从场景进行设计 适度灵活
代码实现之关键词 基于原型 prototype 充分利用 mixin  适当采用 aop 还 JavaScript 本色!
Thanks ^o^

More Related Content

Viewers also liked

淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林Shaoning Pan
 
HFCC計畫成效呈現模式(公開版本)
HFCC計畫成效呈現模式(公開版本)HFCC計畫成效呈現模式(公開版本)
HFCC計畫成效呈現模式(公開版本)HCGO
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存jeffz
 
ARIA in taobao
ARIA in taobaoARIA in taobao
ARIA in taobaoyiming he
 
App程式上架google play流程
App程式上架google play流程App程式上架google play流程
App程式上架google play流程newegg
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)Feng Yu
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)Feng Yu
 
淘宝 for iOS 历程
淘宝 for iOS 历程淘宝 for iOS 历程
淘宝 for iOS 历程Jiwei Xu
 
淘宝网的架构演进
淘宝网的架构演进淘宝网的架构演进
淘宝网的架构演进丁 宇
 
341 店之宝 bp 张希辉
341 店之宝 bp 张希辉341 店之宝 bp 张希辉
341 店之宝 bp 张希辉Rui (Nash) Yang
 
交互设计师的职业发展和规划 胡晓
交互设计师的职业发展和规划 胡晓交互设计师的职业发展和规划 胡晓
交互设计师的职业发展和规划 胡晓hacker168
 
第三方广告代码稳定性和性能优化实战
第三方广告代码稳定性和性能优化实战第三方广告代码稳定性和性能优化实战
第三方广告代码稳定性和性能优化实战leneli
 
微博营销认知误区与新媒体内容营销策略
微博营销认知误区与新媒体内容营销策略微博营销认知误区与新媒体内容营销策略
微博营销认知误区与新媒体内容营销策略newsinlife
 
kissy-past-now-future
kissy-past-now-futurekissy-past-now-future
kissy-past-now-futureyiming he
 
豆瓣广告系统持续集成相关的实践
豆瓣广告系统持续集成相关的实践豆瓣广告系统持续集成相关的实践
豆瓣广告系统持续集成相关的实践William Zhang
 
使用LVS集群架设高可扩展的网络服务
使用LVS集群架设高可扩展的网络服务使用LVS集群架设高可扩展的网络服务
使用LVS集群架设高可扩展的网络服务Wensong Zhang
 
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Hang Geng
 

Viewers also liked (20)

淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林
 
HFCC計畫成效呈現模式(公開版本)
HFCC計畫成效呈現模式(公開版本)HFCC計畫成效呈現模式(公開版本)
HFCC計畫成效呈現模式(公開版本)
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存
 
ARIA in taobao
ARIA in taobaoARIA in taobao
ARIA in taobao
 
App程式上架google play流程
App程式上架google play流程App程式上架google play流程
App程式上架google play流程
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)
 
Overlayfs and VFS
Overlayfs and VFSOverlayfs and VFS
Overlayfs and VFS
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)
 
淘宝 for iOS 历程
淘宝 for iOS 历程淘宝 for iOS 历程
淘宝 for iOS 历程
 
Glider
GliderGlider
Glider
 
FindBugs
FindBugsFindBugs
FindBugs
 
淘宝网的架构演进
淘宝网的架构演进淘宝网的架构演进
淘宝网的架构演进
 
341 店之宝 bp 张希辉
341 店之宝 bp 张希辉341 店之宝 bp 张希辉
341 店之宝 bp 张希辉
 
交互设计师的职业发展和规划 胡晓
交互设计师的职业发展和规划 胡晓交互设计师的职业发展和规划 胡晓
交互设计师的职业发展和规划 胡晓
 
第三方广告代码稳定性和性能优化实战
第三方广告代码稳定性和性能优化实战第三方广告代码稳定性和性能优化实战
第三方广告代码稳定性和性能优化实战
 
微博营销认知误区与新媒体内容营销策略
微博营销认知误区与新媒体内容营销策略微博营销认知误区与新媒体内容营销策略
微博营销认知误区与新媒体内容营销策略
 
kissy-past-now-future
kissy-past-now-futurekissy-past-now-future
kissy-past-now-future
 
豆瓣广告系统持续集成相关的实践
豆瓣广告系统持续集成相关的实践豆瓣广告系统持续集成相关的实践
豆瓣广告系统持续集成相关的实践
 
使用LVS集群架设高可扩展的网络服务
使用LVS集群架设高可扩展的网络服务使用LVS集群架设高可扩展的网络服务
使用LVS集群架设高可扩展的网络服务
 
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
 

More from George Ang

Wrapper induction construct wrappers automatically to extract information f...
Wrapper induction   construct wrappers automatically to extract information f...Wrapper induction   construct wrappers automatically to extract information f...
Wrapper induction construct wrappers automatically to extract information f...George Ang
 
Opinion mining and summarization
Opinion mining and summarizationOpinion mining and summarization
Opinion mining and summarizationGeorge Ang
 
Huffman coding
Huffman codingHuffman coding
Huffman codingGeorge Ang
 
Do not crawl in the dust 
different ur ls similar text
Do not crawl in the dust 
different ur ls similar textDo not crawl in the dust 
different ur ls similar text
Do not crawl in the dust 
different ur ls similar textGeorge Ang
 
大规模数据处理的那些事儿
大规模数据处理的那些事儿大规模数据处理的那些事儿
大规模数据处理的那些事儿George Ang
 
腾讯大讲堂02 休闲游戏发展的文化趋势
腾讯大讲堂02 休闲游戏发展的文化趋势腾讯大讲堂02 休闲游戏发展的文化趋势
腾讯大讲堂02 休闲游戏发展的文化趋势George Ang
 
腾讯大讲堂03 qq邮箱成长历程
腾讯大讲堂03 qq邮箱成长历程腾讯大讲堂03 qq邮箱成长历程
腾讯大讲堂03 qq邮箱成长历程George Ang
 
腾讯大讲堂04 im qq
腾讯大讲堂04 im qq腾讯大讲堂04 im qq
腾讯大讲堂04 im qqGeorge Ang
 
腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道George Ang
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化George Ang
 
腾讯大讲堂07 qq空间
腾讯大讲堂07 qq空间腾讯大讲堂07 qq空间
腾讯大讲堂07 qq空间George Ang
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨George Ang
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站George Ang
 
腾讯大讲堂01 移动qq产品发展历程
腾讯大讲堂01 移动qq产品发展历程腾讯大讲堂01 移动qq产品发展历程
腾讯大讲堂01 移动qq产品发展历程George Ang
 
腾讯大讲堂10 customer engagement
腾讯大讲堂10 customer engagement腾讯大讲堂10 customer engagement
腾讯大讲堂10 customer engagementGeorge Ang
 
腾讯大讲堂11 拍拍ce工作经验分享
腾讯大讲堂11 拍拍ce工作经验分享腾讯大讲堂11 拍拍ce工作经验分享
腾讯大讲堂11 拍拍ce工作经验分享George Ang
 
腾讯大讲堂14 qq直播(qq live) 介绍
腾讯大讲堂14 qq直播(qq live) 介绍腾讯大讲堂14 qq直播(qq live) 介绍
腾讯大讲堂14 qq直播(qq live) 介绍George Ang
 
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍George Ang
 
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍George Ang
 
腾讯大讲堂16 产品经理工作心得分享
腾讯大讲堂16 产品经理工作心得分享腾讯大讲堂16 产品经理工作心得分享
腾讯大讲堂16 产品经理工作心得分享George Ang
 

More from George Ang (20)

Wrapper induction construct wrappers automatically to extract information f...
Wrapper induction   construct wrappers automatically to extract information f...Wrapper induction   construct wrappers automatically to extract information f...
Wrapper induction construct wrappers automatically to extract information f...
 
Opinion mining and summarization
Opinion mining and summarizationOpinion mining and summarization
Opinion mining and summarization
 
Huffman coding
Huffman codingHuffman coding
Huffman coding
 
Do not crawl in the dust 
different ur ls similar text
Do not crawl in the dust 
different ur ls similar textDo not crawl in the dust 
different ur ls similar text
Do not crawl in the dust 
different ur ls similar text
 
大规模数据处理的那些事儿
大规模数据处理的那些事儿大规模数据处理的那些事儿
大规模数据处理的那些事儿
 
腾讯大讲堂02 休闲游戏发展的文化趋势
腾讯大讲堂02 休闲游戏发展的文化趋势腾讯大讲堂02 休闲游戏发展的文化趋势
腾讯大讲堂02 休闲游戏发展的文化趋势
 
腾讯大讲堂03 qq邮箱成长历程
腾讯大讲堂03 qq邮箱成长历程腾讯大讲堂03 qq邮箱成长历程
腾讯大讲堂03 qq邮箱成长历程
 
腾讯大讲堂04 im qq
腾讯大讲堂04 im qq腾讯大讲堂04 im qq
腾讯大讲堂04 im qq
 
腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化
 
腾讯大讲堂07 qq空间
腾讯大讲堂07 qq空间腾讯大讲堂07 qq空间
腾讯大讲堂07 qq空间
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
腾讯大讲堂01 移动qq产品发展历程
腾讯大讲堂01 移动qq产品发展历程腾讯大讲堂01 移动qq产品发展历程
腾讯大讲堂01 移动qq产品发展历程
 
腾讯大讲堂10 customer engagement
腾讯大讲堂10 customer engagement腾讯大讲堂10 customer engagement
腾讯大讲堂10 customer engagement
 
腾讯大讲堂11 拍拍ce工作经验分享
腾讯大讲堂11 拍拍ce工作经验分享腾讯大讲堂11 拍拍ce工作经验分享
腾讯大讲堂11 拍拍ce工作经验分享
 
腾讯大讲堂14 qq直播(qq live) 介绍
腾讯大讲堂14 qq直播(qq live) 介绍腾讯大讲堂14 qq直播(qq live) 介绍
腾讯大讲堂14 qq直播(qq live) 介绍
 
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
 
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
腾讯大讲堂15 市场研究及数据分析理念及方法概要介绍
 
腾讯大讲堂16 产品经理工作心得分享
腾讯大讲堂16 产品经理工作心得分享腾讯大讲堂16 产品经理工作心得分享
腾讯大讲堂16 产品经理工作心得分享
 

架构之美