前言:我是JavaScript。如果你还不了解我,不妨看看《Web技术的前世今生(一)》和《Web技术的前世今生(二)》。前面提到过,我的HTML大哥有一个程序叫做PHPBestbuddy,这家伙经常闲着没事来我们家玩。这一天,PHP又来和大哥聊天了。“伙计,你认识一个叫鲁比的人吗?”PHP问。“我知道,我们最近合作了好几个项目,你怎么会想到问这个?”“啊,你不知道,这小子最近在我们圈子里很火,听说他在耍什么架子。”PHP续说。“哦,你是说Rails。”显然,大哥对PHP中的“架子”很熟悉,向PHP解释道:“那不是架子,是Ruby用来建站的框架。”我听了,他趁机开玩笑说:“后端的家伙算一个,谁敢说网站开发比我PHP哥还火?”“js,你别小看这个Rails,”大哥,作为一个老实人,看不出我是在开玩笑,于是继续认真的说道:“PHP小哥的平易近人,以前对客户很有吸引力,但是随着他们的网站规模越来越大,PHP的亲和力对他们来说成了一种东西,看来他们需要寻求的是一种约束。”“哦,大哥,你说的太对了,”PHP突然从凳子上跳了起来,“最近有几个老客户找我退了,听说我去找了Ruby那小子,大哥,你说说,什么神通?”那小子有什么力量?”“它创建的Rails框架是用来规范网站开发行为,明确你我之间的责任的。”大哥缓缓说道。“哥,别傻了,跟我们说说Rails吧?”我也对这件事产生了兴趣。》它将一个网站的架构分为三个层次,比如我属于视图层(View),只负责页面呈现;业务逻辑相关的工作从视图层剥离出来,由不同的模型来完成(Model);至于接受用户的输入,交给合适的Model处理,再将数据传递给View,这是controller完成的。”大哥看着我迷茫的眼神,继续补充道:“对于一个动态的网站来说,每个页面应该是什么样子是一回事,但是应该呈现哪个页面和页面上动态变化的数据是什么应该是另一个。按照PHP以往的做法,一个文件既包含我们前端页面布局用到的代码,也包含处理业务逻辑用到的代码。且不说设计是否合理,首先是需要用户熟悉我们的前端,需要熟悉后端,”大哥解释道,偷偷地冲我笑笑:“js,你有没有兴趣每次上班都知道PHP是如何工作的?”“不不不,”我连忙摇头,“每次连自己的活儿都做不完,哪有时间管。”PHP不悦地听了,“去你的,我还是厌烦你一直在我眼前晃来晃去。”“现在对了!Rails的出现解决了这个问题。我们的前端工作只是利用所谓的模板引擎来展示页面。Ruby是操作数据库还是进行逻辑操作,与我们无关。我们只需要将最终处理后的数据填充到模板引擎中,然后展示给客户即可。“呃……哥,你说的是所谓的MVC模式吗?”我听我的Java老板提到过它。PHP问。“没错,就是MVC,Java早就玩这个了,它有一个类似的框架叫structs,只是之前这种开发模式不流行,最近被Rails火了。”对了,听说Java说它的structs也要升级到二代了,估计一出来就火了。“哈哈,PHP,看来你后端的朋友都在做框架,就你一个人落后了……”我又开始调侃PHP,“咦?PHP那家伙呢?PHP??》转身发现已经走远了,看来用不了多久PHP的MVC框架就要出来了。2010年,我们进入了Web后端开发史上框架飞扬的时代。框架的作用除了上面提到的表现层和业务逻辑层的解耦,还提供了通过对象操作数据库等ORM技术,以及URI路由、表单验证、国际化等网站开发中的常用功能和安全保护。在此期间涌现出一大批优秀的Web框架,如SSH(Struts+Spring+Hibernate)、SpringMVC、Rails、ASP.NETMVC、Django、Flask、CodeIgniter、Yii、Lavarel、Beego……等等不止如此。)时间来到了2010年,那段时间发生了两件让我印象深刻的事情。一是我们很多客户同时开始把原来在Web上提供的服务转移到智能手机上,但是移动端的应用不识别后台返回的网页(猿志远注:关于这一点,确实不包括近几年兴起的服务(WebApp和HybridApp),这就迫使即使是业务完全相同的应用程序也需要开发和维护Web和移动端的两套后端代码。二是贪婪的人类对在后端View层渲染页面还是不满意。他们认为我们的前端不应该和后端混在一起,希望把我们完全分开。这两件事之所以让我记忆犹新,是因为我在最后的解决中起了很大的作用。还记得我异步刷新网页的能力(Ajax)吗?既然人类讨厌在后端做页面渲染,那么完全可以通过Ajax将数据带到前端进行渲染。这样一来,一方面前后端分离,人类不再纠结于谁来负责模板引擎;另一方面,我们的前端和移动端一致决定让一个叫JSON的家伙作为我们的联运组长负责后端数据的传输,这样对于同一个业务,后端只需要维护一套代码。“能力越大,责任越大”,彼得叔叔对蜘蛛侠说的一句话让我产生了共鸣。自从把页面渲染的工作带到了前端,后端的小伙伴们都松了一口气,但肩上的担子却迅速变重了,每天都很忙。这样持续了一两年,直到有一天,我的好哥哥提醒了我。“js,你看,很多年前,我们前端的职责只是展示页面,但是随着Web发展到今天,我们也和数据打交道了,你不仅要发送数据,接收数据,还要处理数据,最后通过操作dom将数据更新到页面。”HTML大哥接着说,“你把文字加粗能不能参考一下后端大佬做的MVC框架?把数据工作和视图工作分开?”我一拍大腿,“对啊!现在的情况确实太乱了,我们也可以有一个View层,只负责页面渲染,一个Model层,专门处理数据模型,”我想了想然后说:“然后通过某种方式将两层连接起来,当Model数据发生变化时,会同步到View上显示出来,View上的变化也会同步回Model上的数据。”“你说这不就是双向绑定吗?”大哥给了我一个思路,“你还记得我们有一个客户叫微软吗?在数据绑定方面很有经验,你可以去咨询一下。”》(猿志远注:MVVM模型最早是由微软WPF和Silverlight的架构师JohnGossman提出的)没过多久就出现了AngularJS、KnockoutJS、EmberJs、VueJS等一系列MV*模型前端框架等等陆续出现。是的。从此我又过上了轻松愉快的生活。看完故事,我还有什么想说的吗?没关系,关注《猿知原味》公众号(yz--yw),还有很多热闹有趣的干货等着你。传送门:《Web技术的前世今生(一)》《Web技术的前世今生(二)》
