首页 > 代码库 > REST当道,NO MVC
REST当道,NO MVC
前世今生
B/S开发经历了几个时代,现在已经是后MVC时期了。
MVC体现了分层和解耦合的概念,从功能和理念上都做出过巨大贡献,使Java B/S开发在面对大型项目时从容不迫,说成是上个十年Java B/S开发领域的核心技术也不为过。
目前,大家对MVC运用的十分纯熟,对MVC中各个组件也能各得其所,得体的使用。MVC是把好锤子,但现在时代变了,手里拿着锤子,就更要清醒,确认是否每个问题都是“钉子”。
时代变了
时代变了,即使是企业应用开发领域,也更明确地提出用户体验和性能的问题。
MVC架构应对这两个问题有那些力不从心的地方呢?
首先,用户体现的核心是V,主要体现在数据架构、交互逻辑和展现方式上。而在MVC框架中,C才是主导,V是被动的,让送货小弟挑大梁,即使他有这能力,也协调不动。理念、流程、架构上都不顺。
其次,MVC是基于页面渲染的,存在多余的数据传输,性能不好。所谓性能优化,就是找出没必要做的事情,去掉,少做无用功,把好钢都用在刀刃上。MVC最后视图渲染并返回这个环节是个明显的痛脚。
当然,也可以说json等方式也是视图等一种,No MVC不是说不要MVC了,而是不要把他当核心的理念。
应需而生
没有谁比谁更先进,只是在确定的应用场景下,哪个比哪个更合适。
看一下下面的架构。
从理念上看:
绿色背景部分是系统的展现层,也是系统的“核心”,是整个程序的主导,体现“用户体验”优先的概念。
设计开发系统时,先把这部分做出来,而且做好随时优化改进的准备。
HTML、CSS和JavaScript三个小兄弟当上老大啦?真正老大不是他们,但他们真的成为老大的亲随、心腹了。
名正则言顺,做事再也不用挚手指脚了,这样“用户体验”才能真正做出来。
仅仅风华绝代是不够的,还需要真正解决问题。
前端有两类需要,一类是有数据要取出来,这时候同后台说,“我要什么什么,快拿过来,赶紧的”,另一类是有数据要存起来,这时候跟后台说,“这些物件给妥妥放好了,出了岔子拔掉你皮”。
两种情况都只传输最必要的数据。如果采用JSON格式,在真正的数据外部做了格式化包装,但这些包装体现了数据的格式,也是必要的,只是存在改进的空间。
从性能上看:前段页面保存在各种缓存中,基本是毫秒级体验。业务数据是动态的,只能实施从后台获取,这部分数据传输已经做到最精简了,传输过程中还可以配置压缩,是最优化的情况。
后台要怎么做
分层和MVC还是需要的。但需要针对性设计:
首先,获得前台输入的时候,简单类型的参数,需要在Controller方法里可以直接获取。如果前端post了一个JavaScript对象过来,也要能直接转换为Java Object(可以自己定义一个类型,做封装)。转换的性能和易用性要做到极致。如果用Spring MVC的话,重新实现HandlerMethodArgumentResolver试试。
其次,返回的时候,Controller方法应该可以直接返回简单类型数据,返回对象数据应该自动转换为JSON格式,方便前段JavaScript使用。
最后,URL风格方面:可以通过@PathVariable实现标准的REST风格。