`

(转载)淘宝玉伯引发Web前后端研发模式讨论

阅读更多

个人认为:他们根据自己的经验,以谈话的模式来讨论web的前后端协作,还是很有趣的,也很有借鉴意义。

 

淘宝玉伯是是前端基础类库 Arale 的创始人,Arale 基于 SeaJS 和 jQuery。不久前,淘宝玉伯在 Github 的 Arale 讨论页面上抛出了自己对于 Web 前后端研发模式的思考

  他首先指出了前端的产品形态:

前端涉及的产品形态在业界可分为两大类:Web Pages 和 Web Apps 。

Web Pages 是浏览类的,用户主要是来看的:以内容展现为主,辅有少量交互。前端提供基础类库,开发工具化、外包化。典型:首页、营销活动、频道等等。

Web Apps 则以交互为主,用户主要是来用的。可分为两种:

  • 体验类:包含大量交互,同时用户体验很重要。比如 GMail, 支付宝收银台、淘宝购物车等等。
  • 功能类:包含大量交互,以功能为主,体验不是第一位的。比如后台系统、认证流程等。

  接下来又指出了目前遇到的问题:

  1. Web Apps 的开发,前端投入了大量人力,但前端资源依旧存在潜在的瓶颈(比如新增加一条业务线时,很可能无前端去支持)。现有前后端配合的开发模式,沟通协作成本偏 高,可维护性不够方便。在现有的研发模式下,前端自身的价值点也很难体现出来(花了大量时间在业务上,但得到的认可不多)。
  2. 最核心的问题,依旧是前后端的解耦:如何让前后端的工作彼此更独立,如何让更合适的人做更合适的事,把事情做得更好。
  3. 对于体验类,目前业界有很多新兴的解决方案:Backbone, Ember, Knockout 等等,包括 YUI 的 App framework 等。这些解决方案,都希望后端专注于提供 REST 接口,其他的都交给前端来搞定。
  4. 对于功能类的,目前业界解决方案依旧是比较老的一套,比如 GWT 等,包括 ExtJS 也是希望能让后端搞定一切。

  他还提到了一些现有的解决方式:

要达成第 3 点,前端需要了解数据,以及深入把控住数据之外的业务逻辑,然后利用前端技术,完成开发。

要达成第 4 点,后端依旧需要有一定的前端技能,否则容易出性能、可维护性等问题而玩不下去。

  玉伯提到他期待的方式:

  • 让前端专注于 UI 层面、体验层面的开发。
  • 让后端专注于数据、业务逻辑的开发。
  • 第 1 点和第 2 点最好能并行。能有一种很便捷的方式,
  • 将第 1 点和第 2 点的工作无缝衔接起来。

核心是:解耦,让更合适的人做更合适的事。

  pigcan 在评论中指出:

特别同意关于在 web app 方向做为前端对于数据需要有非常好的了解 !正如“我们该怎么做”中提及的 backbone,其 model、以及依托 model 在对数据进行数据 change 监听的时候,都需要对数据本身需要有很好的了解。 而这就会是一个比较大的问题,当 model 数量足够多,且依赖关系足够深的时候,如何梳理数据关系以及多人协同开发就会是一个很大的问题 。有时候不得不涉及组件与组件的数据共享与通信,以及 view 层更多细节性的问题 。

  玉伯接下来贴出了自己和小凡的讨论记录,结论是:

组件和接口是个好的方向,对公司整体效率提升肯定有很大帮助。经历推广和培训之后,详细能大规模实施的,只是前期阻力可能比较大。

  itsoso 根据自己的经验提出:

后端按照 REST 方式的约定开发接口,前端开发足够多的组件给后端用,对公司研发效率的提升会有很大帮助;后端也愿意组装各个组件,跟自己的接口结合起来,完成功能的开 发。让这个流程走通,开始的阻力应该出在后端需要做一些前端积累上,在遇到脚本、样式错误的时候能够完成 debug 的工作,这个过程中仍然需要前端的帮助,需要前端投入,完成这个积累之后,前端就可以解放出来了。

  semious 的经验是:

体验类开发一般可以分为几个方面:

  • UI 表现
  • 用户界面交互逻辑
  • 数据交互
  • 前端业务逻辑

1、对于 UI 表现这个我觉得可以通过 html 模板框架将 UI 的表现方式交给 html、css 工程师负责

2、对于用户交互逻辑可以通过组件的方式,大多数的用户界面交互逻辑都可以组件加上 data-*配置的方式来完成,对于绝大多数的用户交互都是类似的,并且可分装的,对于复杂的交互逻辑,组件可以开放足够的 api 结果,以供调用。这部分开发我觉得可以交给初级前端工程师就可以轻易实现。

3、对于数据交互这块我建议使用数据和 html 结构解耦的方式,将数据结构定义和所绑定的 html 结构解耦,html、css 工程师负责指定调用模板的数据源,后端开发人员定义数据格式,两者通过数据解析框架实现,数据的调用源(本地或者远程)由数据解析框架实现

4、对于前端业务逻辑的开发,我觉得可以让后端开发来参与,因为据我了解,对于绝大后端工程师最痛苦的不是 js 编程,而是页面组件的样式调整、定位之类。现有的模式,基本实现了表现和逻辑分离,后端开发人员在 js 编程中应该碰不到样式的调整。不过我们需要一套框架,已规范后端开发工程师对 js 的编码方式,以免造成 js 代码结构性混乱。

  根据大家的讨论,玉伯总结出了解决问题的初步思路:

  1. 前端组件化,包括两部分:
    • 基础组件:通用的 Utilities + Widgets,比如 Cookie, Calendar, TabView 等等
    • 业务组件:针对具体的业务,由该业务线的前端,抽取出业务线的通用组件
  2. 后端接口化,将数据抽象化、模型化,可输出为 REST 接口
  3. 耦合框架化:
    • 将后端提供的 REST 接口封装成 Model 层(或者直接在模板层同步输出数据,将数据输出标准化)。
    • 将设计师提供的视觉产出转换成 Template 和 Style 。
    • 使用前端组件实现展现层的通用交互。可通过 data-attribute api 或 handlebars helper 在 template 配置完成。
    • 非标准化 View 层的开发,包括 Actions 等行为脚本的开发,含展现层的业务逻辑。

  他还点明了开发人员在其中的职责:

  • 前端组件化由前端开发工程师完成,输出为前端通用类库和业务线的组件库。
  • 后端接口化由后端开发工程师完成,输出为数据模型,可同步或 REST 调用。
  • 耦合框架化,早期由前端工程师负责,后端工程师参与 Model 和 Action 层的部分开发,等该模式成熟到一定阶段时,可交由后端工程师独立负责,同时前端工程师由具体项目的开发,退回到该业务线的前端技术支撑。

  接下来,他还就如何实现“耦合框架化”提出两种思路:

  1. 渐进增强派。保持现有的研发模式不变,只调整人员的职责。比如支付宝,现在前端负责模板层的开发,接下来会逐步把模板层交会给后端开发。前端将退回到 UI 组件和样式开发的工作,后端在这过程中,要逐步学会使用前端组件,独立完成开发。
  2. 引入前端框架。将后端的 VC 层前置到浏览器端,引入前端的 MVX. 代码按照前端框架的方式重新规范和组织,后端需要学会这一套,特别是 M 层和 Biz 行为层。从协同前端开发,到逐步能完全胜任,独立开发。

  玉伯所在的团队选择使用第一种方式,并指出了流程的变化:

保持现有研发模式不变 --》但调整人员职责,将更多工作交给后端独立承担 --》 在这过程中,甄别出通用问题,沉淀到前端通用类库或工具规范里 --》 进一步推进前行直到达成理想情况

  当然这对前端和后端的人员都提出了要求:

这种方式下,前端需要做到:

  • 提供简单易用的前端组件库,包括特定业务的前端组件库。后端可以基于这些组件库,快速完成页面的搭建。
  • 前端组件库里,包括 Alice 等样式库,并以类似 Bootstrap 的方式产出,需要比 Bootstrap 更易用。
  • 一套前端编码规范,需要工具化为 IDE 的插件等,保障后端的基本编码质量。
  • 一套可衡量的有效的最佳实践,可让后端比较容易遵守。以保障后续前端的性能优化和可维护性。

后端开发需要做到:

  • 熟悉 JavaScript 语言。
  • 了解基本的 DOM 和 CSS 知识。
  • 无需了解兼容性问题。

通过上面的方式,达成后端开发往全能的 Web Developer 的转变。

  sundayu 在评论中指出他们类似的工作以失败告终:

前端的难点在于通用库庞大之后的维护和升级(各个业务线都会有自己的版本),主要看功力。

最主要的是后端的问题:

  • 清晰的熟悉 js 的特性。
  • 让他们按你的逻辑干活。
  • 调试。

一直祈求后端听话、爱学、人员稳定。足够长的时间和耐性来培训培训培训。。。

  jayli 认为 sundayu 说的有道理:

互联网开发的基本特点是“变化”,如果你的架构无足够强的“应变”能力,在 web 开发领域难于持久。所以,结构和解耦不是解决问题的关键,而是基础,关键是 JS 超强的灵活性能否在框架中有更极致更放松的表现。现在我们的思路过于纠结各种“约束”,这和快速变化的 web 开发有时是相背的,约束太多,反倒增加执行难度~

  iwege 指出:

其实研发模式本身应该是切合人员配置,你的新研发模式是因为前端是瓶颈,所以让后端的救火。倘若一个公司后端为瓶颈,那前端需要切合到后端去协助。 这种相辅相成才是真正的理想状态。除非你们觉得你们公司的后端都很悠閒无聊,想让他们提高下工作效率,否则我认为最好的方式还是招聘。

对於转变方面,设置一个讨论前提,在无资源缺乏的情况下:

对於后端来说,Java 也好,PHP 也好,至少都是同步的,但是你要求后端直接掌握 js 知识(虽然很好掌握)却实际上是两种思维方式的转变了,相反前端一直都在同步异步之间锻鍊,对内存方面也很计较,转后端是相对简单的。因此我个人的看法 是,让后端知道前端知识,不如让前端熟悉后端的基本数据调用。

对於接口约定方面,当然是 REST 的最好了,最好的是前端约定好 json 格式,然后让后端尝试输出就好了。前端给测试用框架。无需后端熟悉 js。

  semious 继续提到:

个人认为,就程序的发展历程来看,前端是从后端分离出来的,因为前端变得越来越复杂,需要专门的人手去处理,本人就是一个例子。所以个人认为让后端 的开发人员写前端代码不会是一件很难的事情,现在 JavaScript 经过那么多年的发展,其编码规范、设计模式越来越有章可循,让后端开发人员学会 js 语言本身,个人认为难度不会很高,不过后端和前端有一些比较大的不同在于:

  • 代码结构的不同,从标准的 OO 变成 js 特有 OO 方式,面向对象式编程到面向混合式编程(有对象,有函数)
  • 面向请求式编程方式(主要指 web 后端开发人员,不包括纯后端业务级的开发人员)变化到面向事件和面向文档式的编程方式
  • 标记性语言方面的编程特性
  • JavaScript 脚本语言的特性
  • 运行时环境不同,从服务器环境转向浏览器环境的变化等等
如果能在培训中,重点说明这些不同的话,后端人员应该能很快上手。
分享到:
评论

相关推荐

    AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版)

    AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端...

    淘宝前后端分离开发模式实践

    淘宝网周骞在其关于“淘宝前后端分离开发模式实践”的演讲中,分享了前后端分离的背景、历史、实施过程以及带来的种种好处。 在过去的Web开发模式中,前后端的界限并不清晰,前端工程师不仅需要负责页面的结构,还...

    AxureUX WEB前后端交互原型通用元件库 v2.0

    《AxureUX WEB前后端交互原型通用元件库 v2.0——打造高效原型设计的利器》 在数字化产品设计领域,原型设计是至关重要的一步,它能够帮助设计师和开发人员清晰地理解产品的功能和交互流程。AxureUX WEB前后端交互...

    前后端分离技术

    前后端分离技术是目前Web开发领域一个非常流行的趋势,它的核心思想是将传统的前后端混合开发模式转变为前后端分离的架构模式。这种架构模式可以提高开发效率、增强项目的可维护性、提升用户体验,以及更好地适应多...

    Asp.Net Core 3.1 WebApi 实现前后端分离,实现文件上传下载【02源码】

    分享初衷:最近在做前后端分离项目,用到了文件上传下载功能,找了很多类似的案例,基本上都是相互转载,很少有原创的(总之找了很久没找到合适的),最后没有达到我想要的预期效果,故写此篇博客。 需求背景:以前在...

    C#职场最精髓Webapi实例(Demo含源码,前后端分离,终身受益).rar

    此项目是C#语言编写,以最真实职场做项目的技术,WebAPI特性路由+前后端调用分离技术,非常适用于刚入行IT的新人和不懂Web api的朋友们,直接可用,现成项目,UI+DAL间隔分明,数据网格自动获取配置文件动态加载显示...

    c# .net core 3.1 好用的通用后台管理 前后端分离框架

    整合最新技术高效快速开发,前后端分离模式,开箱即用。 代码量少、学习简单、通俗易懂、功能强大、易扩展、轻量级,让web开发更快速、简单高效(从此告别996),解决70%的重复工作,专注您的业务,轻松开发从现在...

    SpringBoot前后端分离demo,后台工程+前台页面

    在当前的IT行业中,前后端分离已经成为Web应用开发的标准实践,SpringBoot和Nginx等技术在其中扮演了重要角色。本项目是一个基于SpringBoot的后台工程与前端页面的完整示例,旨在演示如何实现高效的前后端协作以及...

    Java项目图书管理系统(前后端分离 springboot+vue).zip

    图书管理系统。基于Springboot+VUE的前后端分离项目。 到底什么是非常火的前后端分离?做个入门的项目吧。包括文档说明和博客说明。 前后端分离简单来说就是把一个应用的前端代码和后端代码分开写。

    springboot3+ vue3前后端分离项目搭建代码

    这种模式提高了开发效率,使得前后端可以独立开发和部署。在这个项目中,Spring Boot作为后端服务,提供API接口,Vue 3作为前端,通过HTTP请求与后端通信。 **base_manage** "base_manage"可能是项目中的后端模块,...

    AxureUX WEB前后端交互原型通用元件库 v2.0(元件库版).rplib

    AxureUX WEB前后端交互原型通用元件库 v2.0 可以完整运行 包含大量常用组件

    前后端分离:springboot+vue

    在现代Web开发中,"前后端分离"是一种常见的架构模式,旨在提高开发效率,优化用户体验,以及更好地维护和扩展应用程序。本项目结合了SpringBoot和Vue.js两大技术栈,实现了一个高效、灵活的Web应用。 **SpringBoot...

    springboot+vue前后端分离开发项目源码

    在现代Web应用开发中,"SpringBoot+Vue"是一个非常流行的组合,用于构建高效、可扩展的前后端分离项目。SpringBoot是Java生态系统中的一个框架,主要用于简化Spring应用的初始搭建以及开发过程,而Vue.js则是一个轻...

    ueditor java开发前后端分离 后端代码

    在Java环境下,前后端分离的开发模式已经成为现代Web应用的标准架构,能够有效提高开发效率和维护性。 【描述】中的关键信息是ueditor的源码使用了Java的SSM(Spring、SpringMVC、MyBatis)框架作为后端基础,并且...

    vue+springboot前后端分离项目源码

    在本项目中,我们探索的是一个基于Vue.js前端框架与SpringBoot后端框架实现的完整、功能丰富的前后端分离项目。这个项目集成了多个关键组件和技术,如Redis内存数据库、Druid数据源连接池以及RabbitMQ消息中间件,...

    基于shiro前后端分离分布式权限管理(完整后端代码)

    其次,前后端分离的设计模式是现代Web应用的主流架构。在这种模式下,前端负责用户界面和用户体验,而后端则专注于业务逻辑和数据处理。在这个项目中,前端系统只包含HTML和JavaScript,这使得前端可以独立于后端...

    java web设计模式

    Java Web设计模式是一种在开发基于Java的Web应用程序时遵循的成熟解决方案,它们是解决常见问题的最佳实践。设计模式提供了一种标准的、可重用的方法来组织代码,提高可读性、可维护性和可扩展性。以下是Java Web...

    springboot+vue前后端分离 实现超大文件分块上传

    "springboot+vue前后端分离 实现超大文件分块上传"项目涉及了Spring Boot后端开发、Vue.js前端交互、Element UI组件库的使用、文件分块上传技术、RESTful API设计以及数据库集成等多个方面,是一个完整的Web开发实践...

    基于Vue+ SpringBoot前后端分离框架的GIS系统架构方案.docx

    在本文中,我们首先介绍了传统的 Java Web 开发模式和前后端分离开发模式的比较,指出前后端分离开发模式的优势,如提高生产效率、降低开发难度、提高应用拓展性等。 然后,我们详细介绍了基于 Vue+ SpringBoot 的 ...

    node+vue+mysql前后端分离增删改查

    在现代Web开发中,前后端分离是一种常见的架构模式,它将应用程序的用户界面与服务器端逻辑分开,提高可维护性和可扩展性。本项目“node+vue+mysql前后端分离增删改查”就是实现这一模式的一个实例,利用Node.js...

Global site tag (gtag.js) - Google Analytics