为什么我不再推荐使用 MVC 框架?
来源:鹅是程序猿
toutiao.com/i6763420080542843399
所以V层是否还有必要?
所以我认为目前的多终端环境下,新的划分方式如下:
标题是不是有点耸人听闻,不过我并不是标题党。考虑到谈论这类大而虚的东西(比如最好的语言)容易引起争论和被喷,所以还请诸君带着看戏而不是庭辩的心态来看待本文。
从webform过度到mvc,我曾经惊叹mvc革命性的变革。过去,在创建应用时通常会按MVC各建一个文件夹,每个文件夹就是一个模块。MVC三者的职责是这样的:
1.Controller绑定到某个路由上,接着处理请求参数,然后创建在整个请求中可见的对象,并进行一些业务逻辑上的工作。期间会从数据库中构造Model,也有可能新建/修改Model后将它们保存入数据库。最后,Controller会通过View响应用户的请求,或者返回重定向的报文。基本上业务逻辑都是实现在Controller里面的。(下文为了阐述方便,都以“业务逻辑”特指Controller中的业务逻辑)
2.每个Model往往对应数据库的一个实体。Model类除了装数据之外,还提供了跟自己身份相关的一些方法,比如User类提供authenticate方法以用于验证密码。Model对象通常还会负责检验构造自己的参数是否正确。
3.View负责使用给定的参数渲染模板,并作为响应返回给用户。View一般是由该框架提供的模板语言写成。
但是用mvc做过N个项目之后,我越来越发现这种方式在某些方面有着不可忽视的弊端。尤其在现在多端共享数据的web环境,类似于MVC这样的组织方式已经显得过气了,不同的客户端需要不同的V层,很多时候pc端用v层,h5端,小程序段、App端都有自己的V层,然后数据通过Controller做成api的形式输出数据。
所以V层是否还有必要?
最近的项目中,Controller直接就是输出一个JSON数据,这么一来,传统的View的扮演的戏份还剩多少似乎,我也一直思考如何如何在我们的项目组中进行改进。
过去,View通常由三部分组成:html代码,控制流程语句,渲染时的上下文。如果提供的是JSON格式的模板,那么View的前两部分基本不需要了,只需要渲染时的上下文。可是这么一来,为什么我还需要渲染一个JSON模板,目前的前端框架vue,React可以很方便的实现数据渲染。
所以我认为目前的多终端环境下,新的划分方式如下:
View消亡了,PC端可以回归原始的html页面。
Model分离成两层,一层负责数据实体,另一层负责数据的访问。
Controller分离成两层,一层负责绑定路由,另一层负责业务逻辑。
以上是我个人对mvc的看法,大家可以讨论或给出更好的方案。
为什么我不再推荐使用 MVC 框架?相关推荐
- 为什么我不再使用MVC框架
在我最近的工作中,最让人抓狂的就是为前端开发人员设计API.我们之间的对话大致就是这样的: 开发人员:这个页面上有数据元素x,y,z-,你能不能为我创建一个API,响应格式为{x: , y:, z: ...
- mvc如何嵌套第三方页面_长文观点丨为什么我不再使用MVC框架?
原创: 张卫滨 译 Jean-Jacques Dubray是一名资深工程师,他最近引入了一个新的模式:状态-行为-模(State-Action-Model,SAM).SAM是一个函数式反应型的编程模式 ...
- 为什么我不再使用MVC框架?
Jean-Jacques Dubray是一名资深工程师,他最近引入了一个新的模式:状态-行为-模型(State-Action-Model,SAM).SAM是一个函数式反应型的编程模式,它致力于简化数据 ...
- 为什么我不再使用 MVC 框架?
Jean-Jacques Dubray 是一名资深工程师,他最近引入了一个新的模式:状态-行为-模型(State-Action-Model,SAM).SAM 是一个函数式反应型的编程模式,它致力于简化 ...
- 【Java学习路线之JavaWeb】Spring MVC框架入门教程
文章目录 读者 阅读条件 MVC设计模式简介 JSP+JavaBean Servlet+JSP+JavaBean MVC优缺点 优点 缺点 Spring MVC是什么 Spring MVC优点 第一个 ...
- 写自己的ASP.NET MVC框架(上)
开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的MVC框架设计架构 回忆以往AJAX的实现方式 MyMVC中实现AJAX的方式 如何使用MyMVC框架中的AJAX功能 配置MyM ...
- 从MVC框架看MVC架构的设计
尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些 ...
- Mybatis,Spring,MVC框架
文章目录 @[toc] unit12-mybatis框架 MyBatis简介(了解) 什么是MyBatis 为什么要使用MyBatis MyBatis快速入门 准备数据,创建库和表 创建工程,导入所需 ...
- 写自己的ASP.NET MVC框架(下)
开始 MyMVC的特点 介绍示例项目 关于URL路由 配置MyMVC框架 映射处理器(入口) 内部初始化 从URL到Action的映射过程 PageUrl的设计思想 多URL的匹配功能 解决老的 ...
最新文章
- 神策分析 1.16 版本上线场景库,实操方法论融入产品,全方位赋能多角色应用...
- jq html 多一个引号,为什么jQuery模板会为某些字符串添加双引号
- 坚果云开发团队分享高效代码审查经验
- Swift 必备开发库 (高级篇) (转)
- 管理感悟:如何提交问题的解决方案
- 计算机excel必备知识,excel常用函数大全
- MFC中MSChart控件安装使用
- Learning Premiere Elements 15 Premiere Elements 15教程 Lynda课程中文字幕
- c语言快速学习,怎么才能正确快速的学习c语言
- fgo国服登陆显示服务器错误,命运冠位指定安装失败怎么办 FGO国服安装失败解决办法...
- 初中学校计算机机房管理制度,学校机房管理制度
- 计算机网络管理员下午试题答案,(完整版)计算机网络管理员考试试题库和答案(13页)-原创力文档...
- NTC热敏电阻的主要技术参数
- Java的位运算符详解实例——与()、非(~)、或(|)、异或(^)
- 微信公众号文章链接正则校验
- Bath Body 純白花漾系列
- Linux--进程与任务管理
- 计算机二级考试office资料,2017年国家计算机二级office考试资料
- 从冰雪盛会的幕后赛场,看数字建设者如何保障大型赛事
- VBA怎样关闭工作簿和退出Excel
热门文章
- string类assign方法
- PDF 补丁丁 0.6.0.3282 版发布(修复内存漏洞)
- 【转】 最新版chrome谷歌浏览器Ajax跨域调试问题
- Android进程退出的方法
- CentOS 5.5高负载下,网卡会自动断开
- 海量存储之十八–一致性和高可用专题
- 簡單安裝軟件 GNU Linux
- Asigra无代理备份:“云”数据保护的先行者
- [RHEL5企业级Linux服务攻略]--第9季 Squid服务全攻略之高级配置
- Qt实现3D纹理渲染自由旋转空间立方体