Web开发前后端分离

作者:zjruan 日期:2016-11-09
关键词:前后端分离,nodejs, thrift
描述:本文讨论的范围是web开发,前端:前端开发工程师(html,css,js...),后端:后端web开发工程师(java,C#...)

近年来互联网发展迅速, 乘着“互联网+”的风,各行各业都在与互联网结合,产生了大量的web开发岗位,IT 行业悻悻向荣。
web开发分为多个岗位,可以大致分为 前端、后端、测试、运维。今天我们来聊一聊前后端的那些事。

一、传统的web开发模式


前端是近几年才兴起的一个职业,web发展初期是没有前端工程是的,网页只是向用户单向的传递信息,只是一些简单的html,后来加入了css以及一些简单的 js ,用于美化页面与添加一些用户交互。个人感觉前端的高速发展是伴随着 Ajax 技术的普及而开始的。html5 、css3 ,越来越多的网站从页面开始想web 应用化的转换,导致网页的制作难度越来越高,用户体验已经页面的美观要求越来越高,使得前端开发工程师逐渐分离成为一个独立的职业。

目前,在大部分中小公司,前端实际上是处于一个附属的阶段(依附于后端),前端只写一些 html,css,以及一个交互js,然后将写好的的 html 交予后端套页面
后端拿到 html 页面后将其转换为后端模板,如 velocity,smarty,jade 等等。可能还会写一些数据加载js。所以基本上每个后端都会一些 js,他们最怕的是浏览器兼容性

html2jade.png

这种模式的好处是对前端要求“很低”,以应对现在稀缺的前端资源。坏处也很明显,主要如下:

  • 前后端的一部分工作(html->vm...)重复了,降低了工作效率【后端模板统一以vm为例, vm是 java velocity模板的文件】。
  • 后端转vm的过程中不能保证100%的转化,有时会遗漏一些东西,比如少了个闭标签。
  • 有时会出现三不管文件,前后端都不想维护它,这个文件就会变的越来越烂,越来越没人维护它的恶性循环。比如一个 js 文件,第一手是一个前端写的,写了一些基础的事件绑定以及交互逻辑然后就交给后端了,第二手是后端在里面添加了一个他们的代码,用户行为统计或者其他一些内容。
    不知道你们是怎样的,反正一旦有人改了我的东西,我便不想维护它了,慢慢的这个文件就会变的越来越烂。作为一个前端工程师,不要指望一个后端按照你的规范去写前段代码,在他们眼里,这不是他的职责,才不管这代码写的烂不烂呢,至少我以前在做后端开发的时候是这样想的。
  • 前端很难搞出一套漂亮的代码,原因很简单,或者后端有时也会去修改它,或者dom掌握在后端的手里,前端很难去优化它(dom结构),或者前端工程化(注:近期遇到的问题,版本控制会在文件名后追加MD5摘要,但是相应的要修改页面中的文件引用地址,vm的控制权不在我们手上,让后端频繁的改这个是不可能的)上一些问题,反正就是各种各样的问题,最后,前端代码就是一坨乱麻。好在前端足够简单,我们理一理还不会出什么大的幺蛾子。

因为前后端这种工作的交集,有时会互相甩锅,甚至出现一些对立。


前端vs后端

二、前后端分离


前后端分离的最终目的是问题提高工作效率

传统的web开发模式,后端一定程度上依赖与前端页面的开发,而前端一定程度的依赖后端的数据接口的开发。整个开发过程中部分阶段处于串行状态。而前后端分离的核心思路就是打破这种串行,使得前端与后端能够并行开发,从而提高整体的工作效率。

很多公司都在尝试前后端分离,根据公司的情况,分离的程度也不同。个人感觉,前后端分离的火候,一定程度上依赖该公司前端团队的实力。

阶段1、页面分离

得益于 nodejs 的成功,前端可以不必安装后端开发环境,便可以直接编写后端模板,这样前端便直接提供的vm文件,而不需要后端去转页面,节约一部分后端的工作量。
这种模式下,前端开发工作量会稍微的增加一些,但不会太多,当你熟悉后端模板后,几乎不会有什么额外负担。
前端团队需要搭建一套自编译系统,将vm 自动转化为html,并刷新浏览器。
主要node包:gulp、velocity、browser-sync

阶段2、数据接口分离

数据接口分离,就是开发之前,前后端约定好一个接口,大家都基于这个接口开发。类似于app开发。
这样前端就可以与后端接口解耦了,在后端接口还没有开发完成时,也可以开发数据交互js。
主要工具: rap 或者 swagger

阶段3、展现层分离(展现层由前端维护)

这个也算是前后端分离的究极体了。在一部分公司,PHP承担着前后端分离的重要角色,有些人会有疑问,php不是后端语言么?
对,但是在这个阶段,PHP 只负责 MVC 模式下的 View 和 Controller 层,Model 层交由Java 或C#。关键一点,这里的 PHP 是由前端团队维护,如果交由后端开发去维护,便失去了前后端分离的意义。也因为是前端去维护,我们随其自然的将这里的 PHP 换成了 NodeJS。
该阶段对前端是一个考验,没有做后端开发的的同学入手比较困难,团队里至少有一个对mvc模式较为熟悉,且熟练掌握NodeJS 或者 PHP,在他的帮助下,最终每一个前端成员都能够独立的去写 view 和对应的 Controller。
当做到这一步的时候,前后端也就真正的分离了。我们直接完全是接口化开发,并且有需要的话,针对后端接口编写单元测试。

前后端分离架构图.png

三、前后端分离Demo

基于阶段3的一个demo。
该阶段的一个难点在于web 与 services 的数据交互。好在facebook开源的一个项目 Thrift 为我们解决了这个问题。
Demo中使用了Nodejs 的Express搭建web服务,使用 Thrift 生成 Node 的client和server的接口文件。

Client:

/*  javascript */
...
var client = thrift.createClient(Calculator, connection);
router.get('/', function (req, res, next) {
    client.add(10, 100)
    .then(function (response) {
        res.render('index', { title: 'Express + Thrift', desc: ':1+1=' + response });
    }); 
});
/* jade */
block content
    h1= title
    p Welcome to #{title} 
    p Thrift demo #{desc}

Server

/* Nodejs server */
...
var server = thrift.createServer(Calculator, {
    add: function (n1, n2) {
        var result = n1 + n2;
        return result;
    }
});

console.log("localhost:9090");
server.listen(9090);

Result

Demo Result.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容