钉钉(DingTalk)是中国领先的智能移动办公平台,由阿里巴巴集团开发,免费提供给所有中国企业,用于商务沟通和工作协同,目前注册用户超过1亿,注册组织超过750w家。如此规模体量,对我们的技术架构、开发效率、稳定性提出了巨大的考验。
曾有人说过,前端的框架稳定性是3个月,架构稳定性是6个月,语言稳定性是1年。听起来可能有点激进,但是,从某种程度上也反应了前端领域所面对的问题域和环境在不断的变化。桌面前端也未曾避免。
钉钉桌面端也同步经历了 Angular1.x 的 SPA 1.0 时代到 NW.JS 的2.0时代。今天钉钉进入 3.0 时代——Hybird App 模式,基于 Chromium Embedded Framework (CEF) 的混合 App。网络,数据交给 Native C++ 处理,交互 UI 密集型,追求高开发效率的场景用前端来承接。
复杂异步数据流之间的竞争和协作一直是企业级应用要面对的第一大问题。区别于普适前端应用的面向接口编程,企业级应用的最大特点是领域模型驱动开发,交织错乱的现实业务逻辑通过领域模型进行数字化建模,领域模型之间的竞争和协作又可以映射到异步数据流之间的竞争和协作。而钉钉,在面对这个难题时,依托 Rxjs 强大的响应式编程模型,构建通用、场景等不同粒度的业务流模型,再通过 redux-observable对React tree 之外的副作用进行管理,解决这个问题的同时,也沉淀了业务场景,大大提升了架构的扩展性。
企业级应用的稳定性要求堪比金融级。钉钉是业务工作的基础设施,如果钉钉不稳定,对企业的工作伤害会非常大。同时,在钉钉开发团队,我们提倡的是 TDD,我们的测试同学只有3个,而迭代速度保持每三周一个版本。那我们该如何保障稳定性呢?从自测驱动开发,到严格的 CR 机制,再到分阶段监控模型,通过完善我们的质量保障体系,确保钉钉稳定性。
最近两年,前端领域最火的词应该是‘小程序’吧?这个中国人原创的技术体系,极大的提升了开发者的体验和效率,扩展了生态,帮助用户获得更好、更安全的产品。钉钉也不例外,确切的说钉钉桌面端也不例外。钉钉是国内少有的拥有小程序桌面端的应用,越来越多的业务使用小程序,这也为我们带来了新的课题,现有的 Hybird 应用如何可以快速的赋能小程序动态化?在此基础上,我们提出了逻辑编排的概念,将其与 UI 进行独立。
演讲提纲:
- 钉钉桌面整体架构
- 钉钉桌面前端
- 整体架构
- 复杂异步数据之间的竞争和协作---基于Rxjs的数据流模型
- 稳定性治理---基于分阶段监控的330模型
- 赋能小程序---逻辑编排层的思考和实践
- 挑战和规划
听众受益:
- 了解桌面前端的技术衍变;
- 了解企业应用的复杂性;
- 了解前端在处理复杂应用的方法论和具体实践。