博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
REST当道,NO MVC
阅读量:6770 次
发布时间:2019-06-26

本文共 1470 字,大约阅读时间需要 4 分钟。

前世今生

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风格。

转载于:https://www.cnblogs.com/liuhailong2008/p/4055258.html

你可能感兴趣的文章
Makefile 和 CMakeLists.txt
查看>>
Azure 基础 : 使用 template 简化部署
查看>>
贝叶斯网络
查看>>
日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
查看>>
c语言循环案例
查看>>
vivado2016.2下系统自带DDR3 ip例程仿真运行
查看>>
uboot中关于LCD的代码分析【转】
查看>>
Linux远程管理之SVN,VNC
查看>>
移除powerdesigner中Recent Files中无效链接的文件
查看>>
利用 TensorFlow 入门 Word2Vec
查看>>
linux 查看cpu的使用百分比
查看>>
Ubuntu 16.04使用rm -rf误删文件恢复方法收集
查看>>
ABP框架系列之三十:(Javascript-API-Javascript-API)
查看>>
VS2017 WinFrom打包设置与教程
查看>>
Python 日期和时间
查看>>
在 CentOS7 上安装 Zookeeper-3.4.9 服务
查看>>
32位模式下C/C++程序可用最大内存
查看>>
Bash Shell启动配置脚本的顺序
查看>>
Laravel学习笔记之Session源码解析(下)
查看>>
Java面试进阶部分集合
查看>>