前端领域模型,重构前端研发模式

简介: 阿里巴巴-大钉钉-前端团队-烛象 原创文章 进行本文分享,希望对在路上的同学们有所帮助

无论是小程序还是H5,前端(GUI编程)的展现形态的变化性一直是前端开发效率变革上最大的拦路虎,本文拟抽象一个新的概念「前端领域模型」,对研发模式进行重新思考,以探讨如何降低前端研发人力、提升开发体验为目标。

Part I 对规范/规则的论述

"无规范不成方圆",规范的一致遵守能收敛噪音,达到一致性。在软件工程的领域,当规范演变成规则后,软件开发的持续交付会因为规则的遵守而得以保持垂直、正交,熵的变化也能有可见的收敛。

在前端开发的过程中,我把开发过程抽象成如下的公式:

1. 前端项目 = PageCompose(前端页面)

2. 前端页面 = ComponentCompose(Data(数据) + UI(展现) + Interaction(交互))

3. PageCompose ≈ Router(路由) Or Navigation(导航)

4. ComponentCompose ≈ Layout(布局编排)

目前市面上大部分的解决方案很多都是专注在其中某一个维度的方案解决,大致有以下几类:

UI 解决方案:

  • Ant-Design: 面向React的前端设计语言,UI规范的集大成者,用户遍布全球,Github近 60K star。
  • iView: 面向Vue的前端UI库,Github star近24K

Data 解决方案

  • Lodash: 老牌js工具库,用户遍布全球,Github近 45K star。
  • Rxjs: 异步流解决方案,Github近 22K star。
  • immer: immutable数据处理方案的后起之秀,Github近 17K star。

PageCompose 解决方案

  • React-Router: 面向React的路由方案,Github近 41K star。

整体的解决方案:

  • Umi:基于插件化的React应用解决方案。
  • Angular:大而全的H5应用解决方案。

以上列举的有名的框架或者库,是全球开发者用脑袋进行的投票,是值得研究和学习的典范。

作为以上解决方案的重度使用者,我非常强烈的感知到了规范和规则在软件开发过程中的巨大指引作用,这些规范和规则主要体现在如下几个点:

  1. 体验极佳的api设计: 明确的IO(入参和返回)。
  2. 明确的objective目标: 自律性极强,在某个解决方案领域做深做强。
  3. 单一的使用及设计规范: 单一的强规范约束让使用者"一处学会,遍地会用",这是一款技术产品传播非常重要的点。

Part II 前端领域研发模式的探讨

"工欲善其事,必先利其器",良好的研发模式是软件持续交付的重要保障。 前端是软件开发中交付密度最高的场景,高频的变更和发布严重威胁着前端稳定性,因此"优秀"的研发模式对前端开发而言极其重要,在 John Ousterhout 的著作《A Philosophy of Software Design》提到 软件设计的核心在于降低复杂性,这里面的我想说的"优秀"更多的也将专注在 降低前端复杂性。

大部分前端的研发流程有着相似的分层结构:

image.png

现代前端开发已经有非常成熟的数据驱动(Data Driven Development)开发框架React/Vue、在UI组件库、函数库、网络库、异步处理、数据处理等领域也有非常多的优秀沉淀。 然而,在生态如此繁盛的今天,前端开发在很多业务、很多公司依旧是最大的人力瓶颈,前端人效提升一直是令人头大的命题。

究其原因,笔者认为有以下几个急需攻克的难题:

  1. UI层(前端界面)复用性极差: 前端UI代码大量采用VM(view + model)的方案,面向多样化的设计稿进行开发,代码差异化无法收敛。
  2. Data层(数据处理)复用性极差: 服务端通信给前端的数据虽然已经是视图对象(view object),但是仍旧带有鲜明的领域(Domain)属性,数据结构的差异化直接导致数据处理逻辑的复用性无法收敛。

image.png

举个例子。 上图是非常经典的产品展示页面,然而这2个页面分属于不同的产品线,开发人员的物理隔离和UI上的些微差异性,直接导致彼此可复用的前端代码是0%,需要2个前端人员才能完成需求。

再深究下。 以上前端代码复用度极差的后果,我们能归咎于产品、设计、运营等同学吗?或者说,产品、设计、运营同学,他们难道没有碰到类似的困扰?多次的重复工作,带来的效率问题始终是难以回避的问题。

对于前端开发来说,我想提出一个研发流程上的新概念: 前端领域模型 来解决以上的问题。

Part III 前端领域模型的探讨

前端领域模型(FrontEnd Domain Model): 面向 业务领域 抽象的 UI 模型。

前端领域模型抽象出来后将会对整个研发流程进行一个重构,流程节点将会增加如下蓝色区域。

image.png

如上图,研发流程重构后,前端开发中的 「业务UI」 是面向 「FDO」 进行编程,把业务的个性化转嫁给了Adapter,从而达到「业务UI」复用(Low Code)的目的。

在实际开发中,前端同学需要做的就是「选择合适的业务UI模板」 -> 「实现(implement)对应的FDO」即可快速上线一个业务模块。

image.png

这种开发模式解决的最大的问题是 **软件开发的持续交付,**通过将前端复杂度进行颗粒度的合理拆分,让每个需求迭代产生的复杂度,从指数级变成了线性。

Before: 业务迭代的复杂度 ≈ ViewModel的复杂度 = view复杂度 * Model复杂度

After: 业务迭代的复杂度 ≈ Model的复杂度 + View的复杂度

复杂度的降低带来的收益,不仅仅是前端效率的提升,更是前端稳定性的提升。

Part IV 进一步开放,甚至商业化?

对于大公司如腾讯、阿里、字节,开放平台在整个业务体系有着极高的战略意义。 大量的生态ISV,如何开发出符合要求的应用,最直接的体现就是 前端UI的一致性。

借助如上的研发流程创新,通过制定高质量的前端领域模型(FDO)规范,生态ISV可以较轻松的复用和遵守对应的UI开发规范,进行适当的改造即可快速开发出符合要求的应用,不仅仅是成本降低,更是效率的提升。

这里面的空间,可以想象下,对人力成本的解放有着重要的意义。

Part V 结语

本文是我在实际前端研发流程中,结合团队的实践进行的一些思考,算是一个抛砖引玉。

业内关于研发效率中的物料(Low Code)已经有非常多的讨论和实践。我尝试从另一个角度 「前端领域模型」来看待研发流程的调优和标准化。通过 规范化的研发分层 将复杂度进行拆解,已达到 高质量的持续交付。

关于引入的这个新概念 FDO 以及如何在团队落地,我们已经有一些实践,证明确实在研发效率上带来了较好的提升。 当然,我觉得还可以有很明确的路径做得更好。

本文更多的偏一些概念的讨论,没有讲具体的实现,欢迎探讨。


作者:钉钉前端团队

相关文章
|
28天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
119 2
|
1月前
|
Web App开发 前端开发 安全
前端研发链路之测试
本文由前端徐徐撰写,介绍了前端测试的重要性及其主要类型,包括单元测试、E2E测试、覆盖率测试、安全扫描和自动化测试。文章详细讲解了每种测试的工具和应用场景,并提供了选择合适测试策略的建议,帮助开发者提高代码质量和用户体验。
29 3
前端研发链路之测试
|
1月前
|
资源调度 前端开发 JavaScript
前端研发链路之脚手架
本文首发于微信公众号“前端徐徐”。文章介绍了前端开发中脚手架工具的重要性及其工作原理。脚手架工具能够大幅提升开发效率,确保代码质量和项目一致性。文章详细探讨了脚手架的历史、工作原理、常见工具及其优势与潜在问题,并展望了其未来发展方向,帮助开发者更好地理解和应用脚手架工具。
30 4
前端研发链路之脚手架
|
1月前
|
负载均衡 前端开发 JavaScript
前端研发链路之开发
本文首发于微信公众号“前端徐徐”,作者徐徐。文章介绍了前端研发链路中的开发部分,重点探讨了开发服务器(dev-server)、热更新(hot-reload)、数据模拟(mock)和代理(proxy)等关键技术,帮助开发者理解其基本原理和应用场景,提升开发效率和代码质量。
34 2
前端研发链路之开发
|
1月前
|
敏捷开发 前端开发 Devops
前端研发链路之 CI/CD
本文首发于微信公众号“前端徐徐”,作者徐徐介绍了前端研发链路中的CI/CD。文章从CI/CD的背景、意义、运作方式及常用工具等方面进行了详细探讨,帮助读者理解如何在前端开发中有效应用CI/CD,提升开发效率和产品质量。
36 1
前端研发链路之 CI/CD
|
1月前
|
前端开发 JavaScript 编译器
前端研发链路之构建
本文首发于微信公众号“前端徐徐”,作者徐徐探讨了前端研发链路中的构建过程。文章介绍了构建器、JavaScript编译器和CSS编译器的作用及常见工具,详细解析了它们如何协同工作,提高开发效率和项目可维护性。适合前端开发者阅读,帮助理解现代前端构建体系。
15 1
前端研发链路之构建
|
1月前
|
前端开发 JavaScript 测试技术
前端研发链路之代码规范
大家好,我是徐徐。本文将探讨前端研发链路中的代码规范,包括业界流行规范、CSS命名规范和相关工具。通过保持代码整洁和一致性,不仅能提高团队协作效率,还能减少错误,提升开发质量。文中详细对比了几种常见的代码规范和工具,如 Airbnb Style Guide、BEM、Eslint 和 Prettier,并展望了未来代码规范的发展趋势。希望对大家有所帮助。
68 1
前端研发链路之代码规范
|
30天前
|
设计模式 前端开发
前端设计模式
10月更文挑战第5天
22 3
|
1月前
|
缓存 资源调度 前端开发
前端研发链路之包管理器
本文首发于微信公众号“前端徐徐”。作者徐徐将探讨前端研发链路中的包管理器,分析 Npm、Yarn 和 Pnpm 的特点与应用场景,帮助开发者选择最适合项目的包管理工具,提升开发效率和项目稳定性。文章涵盖包管理器的基本概念、解决的问题、组成部分及各工具的优缺点对比。
26 2
|
28天前
|
JavaScript 前端开发 应用服务中间件
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
23 0