`
stationxp
  • 浏览: 17413 次
社区版块
存档分类
最新评论

REST当道,NO MVC

 
阅读更多

前世今生

B/S开发经历了几个时代,现在已经是后MVC时期了。

MVC体现了分层和解耦合的概念,从功能和理念上都做出过巨大贡献,使Java B/S开发在面对大型项目时从容不迫,说成是上个十年Java B/S开发领域的核心技术也不为过。

目前,大家对MVC运用的十分纯熟,对MVC中各个组件也能各得其所,得体的使用。MVC是把好锤子,但现在时代变了,手里拿着锤子,就更要清醒,确认是否每个问题都是“钉子”。

时代变了

时代变了,即使是企业应用开发领域,也更明确地提出“用户体验”和“性能”的问题。

MVC架构应对这两个问题有那些力不从心的地方呢?

首先,用户体验的核心是V,主要体现在数据架构、交互逻辑和展现方式上。而在MVC框架中,C才是主导,V是被动的,让送货小弟挑大梁,即使他有这能力,也协调不动。理念、流程、架构上都不顺,事情也很难做好。

其次,MVC是基于视图渲染的,并把视图渲染结果作为传输对象的,存在多余的数据传输,性能不好。

所谓性能优化,就是找出没必要做的事情,去掉,少做无用功,把好钢都用在刀刃上。

MVC处理流程中“以视图渲染结果为传输对象”这个环节是个明显的痛脚。

( 当然,也可以说json等方式也是视图等一种,但json的消费者依然是HTML视图。像C分前端控制器和控制器,V也分前端视图和后端视图。概念上太复杂了。)

No MVC不是说不要MVC了,而是不要把他当核心的理念。

应需而生

没有谁比谁更先进,只是在确定的应用场景下,哪个比哪个更合适。

看一下下面的架构。


从理念上看:

绿色背景部分是系统的展现层,也是系统的“核心”,是整个程序的主导,体现“用户体验”优先的概念。

设计开发系统时,先把这部分做出来,而且做好随时优化改进的准备。

HTML、CSS和JavaScript三个小兄弟当上老大啦?真正老大不是他们,但他们真的成为老大的亲随、心腹了。

名正则言顺,做事再也不用挚手指脚了,这样“用户体验”才能真正做出来。


仅仅风华绝代是不够的,还需要真正解决问题。

前端有两类需要,一类是有数据要取,这时候同后台说,“我要什么什么,快拿过来,赶紧的”,另一类是有数据要存起来,这时候跟后台说,“这些物件给妥妥放好了,出了岔子拔掉你皮”。

两种情况都只传输最必要的数据。如果采用JSON格式,在真正的数据外部做了格式化包装,但这些包装体现了数据的格式,也是必要的,只是存在改进的空间。


从性能上看:前段页面保存在各种缓存中,基本是毫秒级体验。业务数据是动态的,只能从后台实时获取,这部分数据传输已经做到最精简了,传输过程中还可以配置压缩,是最优化的情况。

后台要怎么做

分层和MVC还是需要的。

但需要针对性设计:

首先,获得前台输入的时候,简单类型的参数,需要在Controller方法里可以直接获取。如果前端post了一个JavaScript对象过来,也要能直接转换为Java Object(可以自己定义一个类型,做封装)。转换的性能和易用性要做到极致。如果用Spring MVC的话,重新实现HandlerMethodArgumentResolver试试。

其次,返回的时候,Controller方法应该可以直接返回简单类型数据,返回对象数据应该自动转换为JSON格式,方便前段JavaScript使用。

最后,URL风格方面:可以通过@PathVariable实现标准的REST风格。






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics