文字内容
1. 安卓绿⾊色联盟·第20期技术沙⻰龙 赋能产业-猫眼技术开放⽇日 北北京场 2018/9/1 主办⽅方:
2. 猫眼iOS代码复⽤用架构演进 赵哲 猫眼技术专家 2
3. 赵哲 15年年7⽉月加⼊入猫眼,负责猫眼、美团、 点评、格瓦拉客户端猫眼交易易业务。 经历了了猫眼独⽴立拆分、业务⻜飞速发展到 ⾛走向多元化的过程。 致⼒力力于提升团队效率,⽤用持续不不断地的 技术创新助⼒力力猫眼⼤大跃进。
4. 猫眼客户端简史 16年年1⽉月 美团融合 17年年1⽉月 第⼀一次技术⾰革命 农耕时代 17年年8⽉月 17年年12⽉月 第⼆二次技术⾰革命 第三次技术⾰革命 17年年2⽉月 17年年10⽉月 美团融合 格瓦拉融合 蒸汽时代 电⽓气时代 信息时代
5. ⽬目录 1 农耕时代 contents 2 第⼀一次技术⾰革命 3 第⼆二次技术⾰革命 4 第三次技术⾰革命 5
6. 农耕时代——源起 电影频道 猫眼独⽴立APP 5d + 5d RD RD PM&QA PM&QA
7. 农耕时代——⽬目标 • ⽬目标 • 代码复⽤用,⼀一次开发、两处使⽤用 • 前提 • 不不影响业务正常迭代 • 有限的⼈人⼒力力投⼊入
8. 农耕时代——⽅方案 ViewController ⾃自 底 向 上 、 统 ⼀一 基 础 View ViewModel 确 认 订 单 ⻚页 Model Order、Movie、… 剥离耦合、划分模块 选 座 ⻚页 排 ⽚片 ⻚页 。。。
9. 农耕时代——⽅方案 猫眼 MAYBase: 猫眼Pod,与 美团电影频道 复⽤用的代码。 MAYBase 美团 SAKMovieChannel MAYBase.podspec SAKMovieChannel.podspec 美团平台 300+ Pods SAKMovieChannel: 美团Pod,包含美团电 影频道所有代码
10. 农耕时代——成果 电影频道 猫眼独⽴立APP 电影频道 猫眼独⽴立APP 复⽤用率60% RD RD 5d + 5d PM&QA PM&QA RD 5d + 1d PM&QA
11. 问题——两端UI、交互存在差异
12. 问题——基于宏的⽅方案易易出错漏漏、不不易易拓拓展
13. 第⼀一次技术⾰革命——源起 • 问题 • 各端需要分别适配(每个需求适配1~2d) • 多端适配难度升级(新增⼤大众点评融合) • 并⾮非纯真的代码复⽤用(技术追求永⽆无⽌止境)
14. 第⼀一次技术⾰革命——⽬目标 VS VS Q:如何⽤用相同的代码在各端实现不不同的效果?
15. MAYAssetManager ⼀一种多端资源管理理⽅方案,⽤用⼀一套代码+各端资源配置⽂文件实 现各端差异性的UI展示。⽀支持⽂文本、富⽂文本、图⽚片、颜⾊色、CSS 样式等8种基本资源格式。⽀支持添加与⾃自定义新的资源类型,⽀支 持资源包的继承与组合关系,⽀支持资源获取的hook钩⼦子等。核⼼心 代码不不到200⾏行行。 第⼀一次技术⾰革命—— MAYAssetManager 16年年1⽉月 美团融合 17年年2⽉月 美团融合 农耕时代 蒸汽时代 17年年10⽉月 格瓦拉融合 电器器时代 信息时代
16. 核⼼心理理念——业务与UI分离 + “资源”包 MAYBase.bundle category : movie parent : null 继承 MAYBaseForiMeituan.bundle category : movie parent : MAYBase.bundle MAYBaseForieituan.bundle category : movie parent : MAYBase.bundle podspec.resources 美团 猫眼
17. 架构设计——微核架构
18. 基本语法——灵活 + 便便捷 前缀 ⾃自定义 MY. R. … 模块/业务 ⾃自定义 movie. hotel. … 资源类型 可扩展 afstring image color style … 资源Key 模块空间
19. 使⽤用示例例——String Before After
20. 使⽤用示例例——Color
21. 使⽤用示例例——Style
22. 动态切换
23. MAYAssetManager功能族谱
24. 动态下发 • ⽀支持类型 • 普通⽂文本、富⽂文本 • 域名、地址、缓存策略略 • ⻚页⾯面地址、⽹网⻚页地址 • 埋点配置、分享⽂文案 • 效果 • 解决了了66%线上问题 ⽂文案管理理平台 Sync Add/Delete 客户端⽂文案缓存 AddPreHook xxx.string(key) 客户端内置⽂文案
25. 第⼀一次技术⾰革命——成果 5d x m x n = 80d +122% (5d + 1d x (m - 1)) x n = 36d +76%+简化代码+动态下发 5d x n + 0.5d = 20.5d m=客户端数⽬目=4,n=需求数⽬目=4
26. 问题——美团系、点评系技术栈截然不不同 跨端复⽤用 。。。 ⽹网 络 账 号 统 计 ⽹网络 账号 统计 路路 由 分 享 UI 路路由 分享 UI 定 位 Web … 定位 Web … 美团⽣生态 点评⽣生态
27. 临时适配⽅方案 猫眼 MAYBase 点评 美团 MAYBase MAYBase SAKMovieChannel NVMovieChannel 适配器器 Pod1 Pod2 Pod3 美团⽣生态 300+ Pods Pod4 Pod1 Pod2 Pod2 点评⽣生态 300+ Pods Pod2
28. 第⼆二次技术⾰革命——源起 • 问题 • 美团、点评技术栈完全不不同 • 打补丁式的临时适配漏漏洞洞百出 • 并⾮非纯正的代码复⽤用(账号、分享、跳转。。。)
29. 第⼆二次技术⾰革命——⽬目标 Pod1 Pod2 Pod3 Pod4 Pod1 美团⽣生态 300+ Pods Pod2 Pod2 点评⽣生态 300+ Pods Q:如何消除各端的环境差异? 账号 路路由 存储 ⽹网络 分享 模块化 定位 统计 UI Pod2
30. MAYPlatform ⼀一套虚拟的、轻量量级的业务开发⽣生态系统。为APP提供基础 ⽀支撑,涵盖账号、设备信息、⽹网络请求、分享、定位、统计、城 市、浏览器器等组件与模块。开发⼈人员⽆无需考虑各APP容器器基础环 境之间的差异,只需要专注于业务,⾯面向⼀一套基本组件与API进 ⾏行行开发。基于这套环境所写的代码,⼏几乎100%是可移植、可复 ⽤用的。 第⼆二次技术⾰革命—— MAYPlatform 16年年1⽉月 美团融合 17年年2⽉月 美团融合 农耕时代 蒸汽时代 17年年10⽉月 格瓦拉融合 电器器时代 信息时代
31. 架构图——猫眼⽣生态MAYPlatform 猫眼 MAYBase 账号 MAYBase 定位 ⽹网络 点评 美团 MAYBase SAKMovieChannel 路路由 分享 统计 存储 NVMovieChannel 模块化 UI 环境 依赖注⼊入 Pod1 Pod2 Pod3 美团⽣生态 Pod4 Pod1 Pod2 Pod2 点评⽣生态 Pod2 猫 眼 ⽣生 态
32. 依赖倒置 猫眼APP 单 向 依 赖 美团电影频道 点评电影频道 Whatever (⼀一周接⼊入) 猫眼业务 依赖:5 猫眼业务 交易易业务复⽤用率95% + 媒体业务复⽤用率100% MAYAssetManager 消除平台UI差异 MAYPlatform 消除平台基础库差异 猫眼⽣生态 依赖:1 依赖隔离 猫眼平台 美团平台 点评平台 Whatever 依赖:400+
33. 第⼆二次技术⾰革命——成果 • 效果 • 复⽤用率95%(交易易95%,媒体100%) • 依赖减少95%(100+个减⾄至5个) • 融合效率+300%(1个⽉月减⾄至1周)
34. 问题——各端定位、需求差异明显 ⽤用 复⽤用部分 复 部 分 复⽤用仓库 = 美团电影频道 复⽤用仓库 = 美团+点评+格瓦拉 复⽤用部分 = 交叉部分 x 1 复⽤用部分 = 交叉部分 x 6
35. 第三次技术⾰革命——源起 • 问题 • 四端定位、需求差异凸显 • 单模块、仓库组织⽅方式不不堪重负
36. 第三次技术⾰革命——⽬目标 • ⽬目标 • 代码+资源以功能模块为最⼩小粒度复⽤用 • 各功能模块⽀支持⾃自由组装
37. 千星之城 基于之前的多端资源管理理⽅方案(MAYAssetManager)与猫 眼开发⽣生态系统(MAYPlatform),将所有业务功能拆分为独 ⽴立、解耦的功能模块。4端各⾃自通过配置⽂文件组合使⽤用各种功能 模块。所有的功能模块,就像是满天繁星,任由我们采摘。 第三次技术⾰革命—— 千星之城 16年年1⽉月 美团融合 17年年2⽉月 美团融合 农耕时代 蒸汽时代 17年年10⽉月 格瓦拉融合 电器器时代 信息时代
38. 架构设计 猫眼 美团 MAY.podspec 点评 SAK.podspec 格瓦拉 NV.podspec GW.podspec Core Theme UI Comp2 电影 短评 资讯 问答 Base UI Comp1 交易易 列列表 ⻓长评 影⼈人 。。。 账号 ⽹网络 定位 路路由 分享 统计 存储 模块化 UI 千 星 之 城 环境 依赖注⼊入 Pod1 Pod2 美团⽣生态 Pod3 Pod2 Pod2 点评⽣生态 Pod2 Pod2 Pod2 格瓦拉⽣生态 Pod2 猫 眼 ⽣生 态
39. 资源结构 MAYD.bundle Module1.bundle Module2.bundle ModuleN.bundle 组合 MAYDForiMovie. bundle MAYDForMeitua n.bundle MAYDForNova.b undle 配置 + 封装 MAYDTheme 全局统⼀一API MAYD.theme.(string image color xxx) MAYDForGewar a.bundle
40. 第三次技术⾰革命——成果 • 效果 • 拆分模块30+ • 单模块复⽤用率100% • 模块⽀支持⾃自由组装
41. 总结 • 复⽤用率 ≈ 95% • 同步成本 ≈ 0.5d ⼤大融合 消除各端定位差异 • 平台依赖 ≈ 0 第⼆二次技术⾰革命 MAYPlatform 消除各端环境差异 第⼀一次技术⾰革命 MAYAssetManager 消除各端UI差异 17年年10⽉月 格瓦拉融合 重构与代码复⽤用 17年年2⽉月 美团融合 16年年1⽉月 美团融合 效 率 、 质 量量
42. THANKS FOR YOUR LISTENING
43. Q&A