首发于 前端周刊
浅谈前后端分离与实践(一)

浅谈前后端分离与实践(一)

一、起源

(故事纯属虚构,如有雷同,纯属巧合)传说在很久很久以前,我们有志之士有了个创业的想法,于是乎开始了自己的创业之梦,但是人手不足啊,于是乎所有角色老子一个人全包了:

我们用 express 应用生成器来模拟一下传统开发(因为本人早已忘记java是怎么写的了,这里只是为了方便演示)


然后我们愉快的打开了 localhost:3000 看到了我们的页面:


接着,我看是研究代码:

发现我的模板引擎用的是 jade 是通过 nodejs 服务端进行动态渲染:

然后当我访问 localhost:3000 的时候,开始了界面渲染:

然后我又研究了一下 jade 语法,准备后续的开发:

紧接着我们开始了后续的开发....经过几个月,我们写了sql,写了 jade, 写了node .... 。做了PM,做了DBA, RD ....终于一个项目搞完了。然后我愉快的拿到了投资人的投资,有钱了,项目迭代总不能什么事情都是我一个人干吧?我可以找几个人一起来开发嘛,于是乎,我招聘了前端,招了后端,招了 PM ....

后面的开发愉快且开心的打开了我的代码:

...... WTF 是谁把手套放进锅子里面煮...


二、为了更好的划分,我们开始了重构

在发现问题之后,为了更好的脱离这种前端强依赖后端的关系,我们想要把数据层的接口给分离出来,以 ajax 的形式进行交互,让服务端只负责渲染逻辑,不负责数据填充。页面的数据部分通过 ajax json 的形式形式进行交互,所以我们的结构可能是这样子:

所以现在我的页面请求逻辑是这样子的:

在页面新建 index.js

重构 index.jade

这样便完成了前后端数据交互层的问题。but:前后端的界限是按照浏览器和服务器的划分。那么我们经常会发现一些问题:

那么,作为前端开发的我们在实际的开发场景中又会遇到以下问题:

  1. 环境:进行本地开发,需要起后端环境,如 nodejs 服务(如果是去其他语言 我们可能需要 tomcat、Apache.... ),影响开发效率
  2. 联调:前后端共用一套服务端环境,需要及时同步代码,造成效率底下。同时前后端关 注点不同,前端更专注浏览器适配,效果展示和用户体验,而服务端则关注的是数据安全和可靠...
  3. 接口:

出现影响开发效率的事情,就说明现有的模式还是存在问题,显然问题的解题思路需要我们重新思考“前后端”的定义。

三、前后端分离实践

为了更高的提高开发效率,我们的前端 MV* 时代开始到来:

前后端数据通过JSON进行交互,彼此互相不关联,接口分离,后端提供数据即可,前端自己搞。MODEL层 - JAVASCRIPT OBJECT,VIEW层 - JAVASCRIPT TEMPLATE。业界也充满了新的解决方案比如: Backbone, EmberJS, KnockoutJS, AngularJS, React, Vue...

于是乎我们开始了新的旅途:MVVM 的单页面开发:

我们把服务层抽出来,最终形成的目录结构可能是这样的:

我们的服务端提供接口和前端进行交互:

此时,前端使用 vue-cli 生成脚手架,通过安装 axios 进行 ajax 数据请求便可以得到返回的数据。前后端彼此互不关联。

but:新的需求来了,我们要定义前后端的数据接口了,这时候前端需要等到服务端接口开发完才能进行开发吗?说好的前后端分离呢?

这个时候,前端可能会采取 mock 的形式进行数据模拟,需要前后端共同定义好接口规范,于是乎我们开心的在本地写了一大堆mock文件。有一天接口突然要变个字段,并没有及时的通知前端,完了.... 或者团队成员之间协同开发,我们需要同步 mock 数据,需要不断地进行 git 提交.... 随着项目的的复杂度增加,mock 数据如何管理?

这个时候,我们需要一台 mock 服务器,最好能同步服务端接口的 mock。当然,现在网上也已经有了成熟的解决方案,比如 easy-mock 。他可以很好地支持 Swagger,这是一个重磅级特性,通过 Swagger 只需1秒就能创建好项目所有的 Mock 接口。

说到这里,我们完成了一个最基本的前后端分离的方案,后面我会接着介绍中间层 nodejs 应用和前端自动化发布以及脚手架的相关问题。如果您对本文有不同的意见也欢迎一起探讨。


关于:

作者:monkeyWang


本文部分图片段落参考文章: 实践中的前后端分离。 淘宝前后端分离实践


本文源码详见: 服务端代码。 前端代码。 基于 vue 和 easy-mock 搭建的脚手架


本人主页: monkeyWang


微信公众号:会不定期推送前端技术文章,欢迎关注

weixin.qq.com/r/YiixqYj (二维码自动识别)


后面有时间再接着介绍我会接着介绍中间层 nodejs 应用和前端自动化发布以及脚手架的相关问题....

代做工资流水公司常州转账银行流水报价成都办理车贷银行流水赣州代做薪资流水贵阳转账银行流水代开东莞查转账银行流水徐州房贷工资流水 开具海口自存流水打印邯郸背调银行流水代开厦门打印流水单廊坊薪资银行流水图片上饶贷款工资流水重庆日常消费流水开具邯郸车贷流水模板金华工资流水样本绍兴自存流水报价湖州签证流水开具金华办理背调流水德阳银行流水修改公司天津签证银行流水 多少钱徐州日常消费流水查询邯郸查工资流水app截图太原做企业流水打印淄博房贷工资流水 打印绵阳代办个人流水盐城查询流水账单赣州打工资流水账单漳州代开房贷工资流水曲靖签证流水模板济宁办理银行流水电子版银川打工资流水app截图香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化