前世今生

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. diff比较两个文件的差异

    1.diff -ruN a.txt b.txt>patch.txt比较第二个文件与第一个文件相比的变化,并将变化添加到patch.txt文件中,-表示删除的行,+表示添加的行 2.下面的,“&l ...

  2. javaweb 课程设计编码和设计文档

    企业办公软件设计文档 1引言 1.1编写目的 OA办公自动化系统详细设计是设计的第三个阶段,这个阶段的主要任务是在OA办公自动化系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模 ...

  3. 自学Python十一 Python爬虫总结

    通过几天的学习与尝试逐渐对python爬虫有了一些小小的心得,我们渐渐发现他们有很多共性,总是要去获取一系列的链接,读取网页代码,获取所需内容然后重复上面的工作,当自己运用的越来越熟练之后我们就会尝试 ...

  4. 闲谈Spring-IOC容器

    闲聊 无论是做j2ee开发还是做j2se开发,spring都是一把大刀.当下流行的ssh三大框架中,spring是最不可替代的,如果不用hibernate和struts,我觉得都无关紧要,但是不能没有 ...

  5. 华为 荣耀 等手机解锁BootLoader

    下载工具按提示操作即可 链接:https://pan.baidu.com/s/1qZezd1q 密码:8pad 备用链接:https://pan.baidu.com/s/1nwv0heD

  6. 【Oracle】数据迁移工具(1):SQL Loader

    SQL Loader是一种数据加载工具,可以把外部数据加载到Oracle数据库中.SQL Loader中的参数有很多,本文只在第一部分中列出常用参数.要想运用SQL Loader工具 ,需要我们编辑一 ...

  7. WEB笔记-5、字体和文本

    字体样式 font-family font-size font-weight font-style font-variant font(简写) 常用字体: serif,衬线字体,每个字符笔画末端会有装 ...

  8. hibernate_04_hbm.xml介绍

    先贴上类文件Students.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC & ...

  9. dotnetnuke 中使用ado.net entityframework 如果在程序中动态调用系统的连接字符串信息

    1,打开如下图的Model1.Context.cs文件 2,找到 Base:(ConnString.conn)是我改的.默认生成的是"name=实体连接字符串" Connstrin ...

  10. dubbo之直连提供者

    在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获 ...