AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

链家网移动端敏捷之术 by 郭晓铭

发布者 mobile
发布于 1468198455571  浏览 6883 关键词 移动开发, 架构 
分享到

第1页

链家网移动端敏捷之术



第3页

郭晓铭

链家网移动端架构师

一枚成长中的程序媛 对复杂业务下的架构设计和研发效率提升有浓厚兴趣

愿始终做一个不端不装的技术人



第4页

内容摘要



业务现状



刀耕火种



开疆拓土



与时偕行



更进一步



第5页

业务现状



第6页

链家网移动端业务介绍



用户端



链家网

lianjia.com



业主端



经纪人 端



连接 * 数据 * 服务



买方服务 卖方服务

经纪人



二手房 新房 学区房 租房 地图找房 百科 …



估价 委托 钥匙托管 销售周报



房屋实堪 房源动态







房源管理 客源管理 签约



签后 商机获取 金融







第7页

链家网移动端业务特点



目标用户角色丰富

服务于房产领域的各个角色:用户、 业主、经纪人

业务和产品多元化

覆盖二手房、新房、租房、估价、业主委托、 钥匙托管、房源管理、客源管理等业务,包含 链家App,Link,新房Link,案场等多个App



业务地域范围广且差异性大

北京、天津、青岛、成都等17个城市,各个城 市的业务范围不同

线上业务需快速响应线下业务的部署

房产O2O平台,强调线上线下的配合



第8页

刀耕火种



第9页

业务简单

业务覆盖城市范围小

仅支持北京等少数城市

产品用户角色单一

产品仅服务于买方,卖方、经纪人角色非 目标用户

业务单一,未形成线上线下的闭环

早期仅支持二手房业务,且线上的浏览行为未 和线下的经纪人带看等行为打通



第10页

团队工作方式传统

团队规模小

iOS和Android端各2位,人员密切配合,不存 在业务线的分工

瀑布式开发

版本需求比较稳定,在开发过程中很少调整

手工打包上线

产品投放渠道较少,发版节奏平缓,测试和上线均靠 手工打包



第11页

架构简单



MVC架构

通用设计,学习和维护成本低

MVC架构功能划分清晰;不容易产 生误解,开发人员之间沟通无障碍



Model



对复杂业务不适应

业务逻辑变复杂时,Controller将变 得越来越大



View



Controller



第12页

开疆拓土



第13页

需求与挑战

地域性业务差异

支持北京、青岛、成都、南京等9个城市,各城市 支持的业务范围需根据公司战略随时调整

业务增多,内容型业务的形态多变

由单一二手房买卖业务增加到新房、租房、百科、问答 等业务群,且热点、百科等内容型业务的具体形态多变

人员增多,人均产出下降,代码质量堪忧

团队人员增长到3倍,技术水平参差不齐,规范缺失 ,项目质量缺乏保障



第14页

地域性业务差异



第15页

基于短链的配置化



服务端下发城市配置

配置信息包含业务入口icon、标题 、跳转短链,功能开关等

跳转短链注册表

保存短链pattern与页面的类别、类 参数名、短链参数名、默认参数值 、跳转方式等的对应信息

短链解析和页面跳转

使用注册表中的短链pattern做正则 匹配,根据匹配到的信息创建页面 并用对应的跳转方式打开



配置化



更统一

各个业务的解析和跳转逻辑由跳转 引擎统一处理

更灵活

城市配置由服务端下发,城市业务 范围的调整不依赖发版

扩展性更强

快速支持新增城市,且对新业务的 支持不影响旧功能



第16页

业务快速上线和调整



第17页

Hybrid App



Native



二手房 新房



租房







重点业务体验保证



H5



百科 热点



问答







内容型业务、运营活动



第18页

HLHybridBridge——统一交互方 案



HLWebViewController



UIWebView



1.webViewDidFinishLoad( )



2.registerBridge()



很小巧很清晰

不依赖第三方解决方案, 交互 流程更清晰,学习成本更低



3.setTitleViaBridge()



信息传递安全

通过Bridge注入参数信息,而 不是放在url里



4.actionShareViaBridge()



两端方案统一

iOS & Android采用统一方案 , H5页面开发更加快速



iOS平台Native与H5交互时序图



第19页

项目质量缺乏保障

1% crash率



第20页

开发流程优化



代码规范形成

代码风格一致,提高可读性 ;统一的入口参数校验、异 常处理等,提高健壮性;



Code Review

同步开发人员对代码和设计

的理解;提前发现问题



敏捷开发模式

随时交付,提早反馈



第21页

收益(一)



0成本增加新城市



315年3月上线 条业务线



第22页

收益(二)



0.3% crash率



9千行代码bug数



第23页

与时偕行



第24页

需求与挑战

多个业务团队并行开发

随业务复杂性提升,链家App演变成为多 业务团队并行开发模式,需要相应架构支 撑

多个新产品需快速上线

计划推出Link、新房Link产品,需要能复 制已有功能快速上线

对接后端团队越来越多

沟通成本高,发版风险大;不同团队接口 数据格式差异大,客户端数据解析和校验 逻辑复杂



第25页

组件化



业务



IM



新房



二手







公共 模块



基础服务

网络 日志 CM





第三方库

crash监控 滤镜

工具类 …



通用UI

按钮 筛选框 VC基类





CM:Component Mediator



主工程

AppDelegate/Appli cation

Frameworks/jar包

Resources





第26页

组件间的相互调用



第27页

组件间的调用方案



IM



新房



二手







Component Mediator



IM 接口类



新房 接口类



二手 接口类







各组件之间相互独立,不直接调 用,而是通过中介者Component Mediator相互调用

Component Mediator按组件拆 分, 每部分为该组件支持的调用 方式

各组件针对组件间调用做相应接 口类。Component Mediator利 用反射机制调用该接口类的相应 方法



第28页

组件化过程中的风险控制



代码仓库分离

主工程代码、公共模块代码、以及 各业务组件代码仓库分离

权限控制

为单个业务团队配置公共模块代码 以及其他业务代码的只读权限

建立接口类的命名规范

对组件接口类名以及接口方法的命 名规范统一,降低开发成本



配置化



接口类的Code R接口e类vi出e错w的影响范围相对较大,

需要业务负责人对接口类做重点 review

小流量

Android端链家App iOS 端Link(企业应用)

热修复

紧急修复组件化过程中造成的线上 问题;每个补丁不允许超过1个版本



第29页

API团队引入



BE1 BE2 Client

Before



… BE1 BE2



沟通成本降低 发版风险降低 业务逻辑简化



API

Client

After







第30页

移动端与后端配合开发流程



PM



S1需求



S2需求



S3需求



S4需求



需求评审通过



需求评审通过



S1开发



S2开发



S3开发



后端RD+QA



QA测试通过



QA测试通过



中间层API+QA



S1接口

测试通过



S2接口

测试通过



S1 UI完成



S2 UI完成



UI



S*需求



S*n需求



S*开发



S*n开发



S3接口



S*接口



S3 UI



S* UI



S*n接口 S** UI



移动端RD/H5+QA



S1需求



S2需求



测试通过



S3需求



S*需求



产品发布



S1发版



S2发版



S3发版



S*发版



第31页

收益



2 1.5 0.1版本周期平均 周 Link app 用时



< % crash率



月注:Link app 代码规模10w+(不含第三方库

)



第32页

更进一步



第33页

未来展望

插件化

用户对产品功能做个性化定制;减少安 装包体积;降低发版成本

跨平台技术

最小的成本覆盖到两个平台,避免重复 开发

安全性

房屋交易环节的线上化



第34页

Q&A



第35页

Thanks!



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。