前世今生

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

REST当道,NO MVC的更多相关文章

  1. 【ASP.NET Core】MVC模型绑定——实现同一个API方法兼容JSON和Form-data输入

    在上一篇文章中,老周给大伙伴们大致说了下 MVC 下的模型绑定,今天咱们进行一下细化,先聊聊模型绑定中涉及到的一些组件对象. ------------------------------------- ...

  2. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  3. .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法

    在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  6. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  7. 开源:Taurus.MVC 框架

    为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...

  8. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  9. Taurus.MVC 2.0 开源发布:WebAPI开发教程

    背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...

随机推荐

  1. Java上传视频

    页面: 上传文件时的关键词:enctype="multipart/form-data" <%@ page language="java" import=& ...

  2. 浏览器缓存机制(HTTP缓存机制)

    其机制是根据HTTP报文的缓存标识进行的. 过程:浏览器发起HTTP请求 – 服务器响应该请求.那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果 ...

  3. Android 判断app是否安装

    1. private boolean isAppInstalled(Context context, String uri) { PackageManager pm = context.getPack ...

  4. 八:前端---Vue下的国际化处理

    1:首先安装 Vue-i8n npm install vue-i18n --save 注:-save-dev是指将包信息添加到devDependencies,表示你开发时依赖的包裹. -save是指将 ...

  5. VMWare 安装Centos 6.9

    1.新建虚拟机 (1)点击文件-->新建虚拟机 (2)选择 自定义(高级)--> 下一步 (3)选择Workstation 12.0 --> 下一步 (4)选择 稍后安装操作系统 - ...

  6. Oracle存储过程给变量赋值的方法

    截止到目前我发现有三种方法可以在存储过程中给变量进行赋值: 1.直接法     := 如:v_flag := 0; 2.select into 如:假设变量名为v_flag,select count( ...

  7. Laravel -- windows apache .htaccess https 路由重写

    一: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{SERVER_PORT} !^443 RewriteCond %{RE ...

  8. 【转载】Jmeter分布式部署测试-----远程连接多台电脑做压力性能测试

    在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起J ...

  9. apicloud iphoneX底部虚拟键盘遮挡

    1.首先,底部的高不能写死. 2. var footer = $api.byId('footer'); $api.fixTabBar(footer);这句应该写在 footerHeight = $ap ...

  10. eas之设置单元格可编辑

    for(int i=0;i<kdtEntrys.getRowCount();i++){    kdtEntrys.getRow(i).getCell("orgUnit").g ...