MVC模式已死
MVC模式:Model模型 View试图 Control控制器,是目前主流模式,被当作服务器软件入门基本模式学习和掌握,主流框架Struts 1/2 JSF Wicket基本都顺理成章支持MVC模式。
但是,随着时间推移,MVC模式也暴露出大量缺点,因为MVC模式本质上是一个结构型模式,结构模式相比行为模式而言,实际就是静止的,相对固定的,而随着B/S和互联网应用不断普及,Web 2.0和社会化媒体 以及游戏等大量频繁交互应用普及,相对静止的MVC模式已经不适合高度交互注重行为的应用了。
DDD领域建模本身比较重视结构,它的实体 值对象和服务器是也是一种结构划分,但是没有强调对象职责行为的重要性,而这是对象和数据库唯一的区别,当然其上下文场景概念的提出,也可以认为体现了对角色和场景的重视,但远远不够。
相反,对象设计:角色、责任和协作"(Object Design: Roles, Responsibilities, and Collaborations))一书提出职责驱动开发,将对象行为上升为重点,提出了对象其实是在扮演某种角色,而角色是有职责的,然后会在一定场景上下文环境中实施一定交互行为,这些已经在Jdon进行了充分讨论:
DCI,领域模型,领域事件的一些想法
异步架构思维:使用Akka实现领域建模
该书总结了集中式控制器4大缺点,MVC的控制器实际就属于这种集中式控制器风格:
1.Control logic can get overly complex. 控制器会变得复杂,很多人在Struts的Action控制器中写业务代码已经变得很常见,所有的操作都在action中,有的action都几乎上千行了.
2.Controllers can become dependent on information holders' contents.控制器变得依赖信息数据中心或数据库了,控制器做很多事情,意味着领域对象就做很少事情,控制器最后不是只会做什么,决定战略性的事情,也和怎么做,如何实现等战术问题耦合。
3.Objects can become coupled indirectly through the actions of their controller. 对象将间接地通过控制器的action耦合在一起,一个对象在控制器中查询获得,然后复制给另外一个对象,这两个对象就耦合在一起。
4.The only interesting work is done in the controller.唯一有趣的工作是做控制器,Responsibilities职责被吸进控制器对象,只将一些行为留给角色模型完成,重要的事情都集中在控制器中了。
MVC的控制器是Mediator模式一种,也属于一种集中式控制器,它与观察者模式重大区别是:Mediator模式封装了通讯,而Observer分散通讯,从通讯角度来看,控制器也有其固有的缺陷,容易变成大而全高度耦合的集中器,这些都是为OO所不容。
DCI架构是最近才兴起的新概念,它从一个全新角度来看待软件,与职责驱动设计不谋而合,同时也是对DDD的发展和完善。
DCI是数据Data 场景Context 交互Interactions的简称,它重要贡献是提出了场景这个概念,而这点是职责驱动开发一书没有提及,该书只是否定了MVC,揭露其问题,没有提出替代方案,而DCI正是MVC的替代架构,DCI替代MVC 用场景替代控制器应该是大势所趋,如下图(图来自原文英文TheDCI Architecture: A New Vision of Object-Oriented Programming):

场景其实将MVC中Control和模型中一部分挖了出来,以角色场景方式进行重新组合。这是一种与MVC模式考虑角度完全不一样的新角度,这种角度更符合OO。
最近,有人提出 场景Context是新的对象类型,场景不但可以替代SOA的Web服务,也可以替代MVC的控制器。
个人认为:未来新的分层架构可能变成这样:
View --> Context ---> Domain Model ---> Component/Respository
MVC模式已死。
MVC模式已死的更多相关文章
- [转]MVC模式已死?何不试试MOVE
在36Kr看到一篇译文,主要是提出一些新的概念,升华老的MVC模式.看上很不错,转过来,做个记录. ========================= 华丽的分割线 ================= ...
- OAuth2密码模式已死,最先进的Spring Cloud认证授权方案在这里
旧的Spring Security OAuth2停止维护已经有一段时间了,99%的Spring Cloud微服务项目还在使用这些旧的体系,严重青黄不接.很多同学都在寻找新的解决方案,甚至还有念念不忘密 ...
- AngularJs(一) MVC 模式的应用
Model的应用 MVC的模式大家都是十分熟悉了,那么Angular是怎么规划的呢.数据被放在json文件中,通过Ajax获取数据. [{ "action": "Buy ...
- [转载]WIKI MVC模式
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最 ...
- 【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表
提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- [ASP.NET MVC 小牛之路]01 - 理解MVC模式
本人博客已转移至:http://www.exblr.com/liam PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各 ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- MVC模式与三层架构和表示层
1.MVC模式 - Model-View-Controller - 模型-视图-控制器 - Model(模型) > 模型分为业务模型,和数据模型 ...
随机推荐
- ServiceStack 入门(二)
本文介绍创建一个简单的基于ServiceStack的项目. 1. 新建一个solution 2.创建完成后有4个project. ServiceModel是定义Request DTO 和 Reques ...
- errorPlacement的位置问题
做一个前端的验证,使用了JQUERY.Validate 在errorPlacement上纠结了半天: 百度大多数都是一个答案: errorPlacement: function(error, elem ...
- MFC解决View中添加控件闪烁
一.简介 我们经常会在我们的View类中添加各种类型的控件,列表控件就是最常用的了.但是我们发现添加控件的时候会,在窗口变化的时候会导致各种各样的闪烁,让我们烦恼异常.所以我对此找到新的解决方案. 二 ...
- html object元素
知道object是播放音频,但是想了解具体点,百度一下,感觉模模糊糊的,感觉看不大明白,最后找到一个解释比较详细,先从应用,到解释具体属性, 具体网址是: http://www.w3school.co ...
- 《JavaScript+DOM编程艺术》的摘要(五)-----添加insertAfter
在JS原生里面,没有提供insertAfter这个方法,不过我们可以利用appendChild.insertBefore.parentNode这些方法创建一个insertAfter方法,代码如下: f ...
- 修改IIS虚拟目录名称
@echo off echo ------------------------------------------------------------------------------ echo - ...
- 《火球——UML大战需求分析》(0.2)——目录
说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...
- proguard混淆jar文件
Proguard是个优秀的java混淆工具,使用示例如下,一个java工程对外接口代码如下(无需混淆) package com.ciaos.open; import com.ciaos.inner.I ...
- Linux中环境变量到底写在哪个文件中?解析login shell 和 no-login shell
login shell:取得bash 时需要完整的登入流程,就称为login shell.举例来说,同tty1~tty6登入时, 需要输入用户名和密码,此时取得的bash就称为login shell ...
- 用上Google才是正事 分享几个訪问Google的IP和域名
通过VPN或者GAE等代理进行訪问,GAE下载请移步<GAE 3.1.18 最新版本号下载 用上Google才是正事>.这是大家通经常使用的办法.也有同学们不愿意使用代理软件.那今天来分享 ...