`
snoopy7713
  • 浏览: 1146747 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

MVC已过时,MOVE时代来临?

阅读更多

MVC是一个很常用的程序开发设计模式,M-Model(模型):封装应用程序的状态;V-View(视图):表示用户界面;C-Controller(控制器):对用户的输入作出反应,创建并设置模型。

关于这个话题由来已久,MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。在实际使用中,开发人员在不知道把代码放在哪里的时候,都喜欢把代码放在Controller里面。

为了解决上述问题,LinkedIn的软件工程师Conrad Irwin 开始使用另一种模式:MOVE采用了一个新的模型:MOVE:Model,Operation,View and Event。日前Conrad Irwin在个人博客 上分享了关于这种模式的一些观点。

Architecture of a MOVE app

上面这张图显示了MOVE这个模式的基本架构。下面详细介绍一下该模式:

  • Model :封装所有应用程序对象。
  • Operation :封装所有应用程序执行的动作。
  • View :应用程序和用户之间的中介。
  • Event :链接所有组件事件。

为了避免面条式代码,应该允许每种对象类型。在上图中,已经用箭头标明出来,例如,View允许通过Mdoel去监听Event、可以允许改变模型,但Model不应该只参照View或Operation。

Model

以一个“用户”对象为例,这个Model至少有一个email、姓名和电话号码这几个属性。

在MOVE应用程序模型中Model只封装了简单的方法。这也就意味着除了getters和setters,还会包含一些验证函数,比如:“密码正确吗?”。但不包含把数据保存到数据库或者加载数据到外部API中的方法,这些都应该是Operation来完成的事情。

Operation

应用中,比较常见的Operation应用是一个用户登录程序。它实际上是由两个子操作完成的:首先,从user中获取邮箱地址和密码,其次从数据库中读取user对象信息,并且检查两者数据是否匹配。

在MOVE模型中,Operation永远都是一个执行者。负责对Model进行修改、适时显示正确的视图给用户、对用户触发的事件做出响应。在一 个分解良好的应用程序中,相对Operation每个sub-operation都可以在其中单独运行。这就是为什么Event箭头向上而Changes 向下。

这样做的好处在于:在程序运行时,开发者可以把整个应用当作一个Operation。如果需要,它还可以尽可能地分解为更多的sub-operation,而每一个sub-operation都可以并行运行,然后在它们都结束时程序结束运行。

View

登录界面就是一个视图,显示几个文本框。当用户点击“登录”按钮时,视图将产生一个“loginAttempt”事件,并且把用户输入的用户名和密码传送过去。

视图就是用户看到的整个界面并且用户还可以通过界面与程序进行交互。它们不仅会以一个易于理解的方式来显示应用程序,而且还可以把用户传入的信息简化成有意义的事件来与用户进行交流。

重要的是,视图并不会直接改变模型,它们只会发出事件给Operation,并且等待Model发出事件响应。

Event

用户点击登录按钮时,视图会产生一个“loginAttempt”事件。此外,当登录这个操作完成后,“currentUser”模型会发出一个事件去通知你的应用程序。

事件监听和MVC/MOVE里的控制刚好相反,开发者需要允许Model去更新View,即使在Model不清楚哪个View正在更新。

总结

本文并不是强调MVC有多糟糕,在过去的几十年里,它以难以置信的方式成功构建了许多大型应用程序。但它毕竟是几十年前为老技术而设计的,而MOVE作为一个新技术,在原有的基础上进行升级,以更好的适应软件开发的需求。

分享到:
评论

相关推荐

    Spring MVC 到底是如何工作的?1

    Spring MVC 框架的工作原理 Spring MVC 是 Spring 框架的一部分,提供了一个基于模型-视图-控制器(MVC)模式的 Web 应用程序开发框架。下面将深入探讨 Spring MVC 的工作原理。 DispatcherServlet 的角色 在 ...

    MVC编程模型

    **MVC编程模型详解** **一、模型-视图-控制器(MVC)的概念** MVC,即Model-View-Controller,是一种软件设计模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种模式...

    DayPilotMonthLiteMvc4.VS2010.20140527.zip

    用于ASP.NET MVC 1.3的开源DayPilot Lite引入了AJAX每月事件日历。在本文中,我们将看到如何设置项目,创建新的ASP.NET MVC视图和控制器,如何加载日历,拖放日历事件移动,CSS主题和事件自定义。

    基于mvc的留言板

    基于mvc的留言板开发,包括增删查改,分页,基本数据库操作 1.请将文件名名为mvc1 2.执行sql语句 3.将解压的文件mvc1放在www目录下 4.搭建好php环境后直接输入 http://localhost/mvc1/index.php?c=add&m=msg_list ...

    MVC设计模式例子程序

    **MVC设计模式详解** MVC(Model-View-Controller)设计模式是一种广泛应用于软件开发,尤其是Web应用程序中的架构模式。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此...

    C#实现MVC设计模式,源码

    C#实现MVC设计模式,虽然这个设计很简陋,可重用价值有限,但至少这是个MVC的设计模式,现在很难看到真正MVC的设计了, 很多人把asp.netMVC当作MVC, 要知道这篇文章是2005年发表的,原文: ...

    MVC简单例子C#

    5. **配置路由**:默认情况下,ASP.NET MVC已配置好基本路由,但如果需要自定义,可以在`Global.asax.cs`的`RegisterRoutes`方法中进行设置。 6. **运行应用**:启动应用,浏览器中输入`...

    Spring MVC入门教程

    二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置文件片段讲解 七、spring mvc 如何访问到静态的文件,...

    mvc 代码 mvc 代码

    **MVC(Model-View-Controller)模式**是软件工程中一种广泛采用的设计模式,尤其在Web开发领域,它能够有效地将应用程序的业务逻辑、数据处理和用户界面分离,提高代码的可维护性和可扩展性。 **模型(Model)**是...

    精通Spring MVC 4

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...

    ASP.NET MVC项目实例

    ASP.NET MVC作为微软官方的.NET平台下MVC解决方案,自诞生起就吸引了众多.NET平台开发人员的眼球。ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比...

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

    利用MVC模式编写的Winform程序源码

    根据文章《Introduction to Model View Control (MVC) Pattern using C#》编写的程序源码,可以用来学习MVC,文章链接...ArticleID=448db537-f236-497d-a16b-46c5d1141e3f 其他用户翻译后文章地址...

    ASP.NET MVC5

    ASP.NET MVC5是一个基于微软.NET Framework的开源web应用程序框架,专为构建动态、数据驱动的Web应用程序而设计。它结合了Model-View-Controller(MVC)设计模式、ASP.NET的功能性和HTML5的能力,提供了更高效、灵活...

    asp.net mvc3

    ### ASP.NET MVC3知识点详解 #### 一、ASP.NET MVC3简介 ASP.NET MVC3是Microsoft推出的一个基于Model-View-Controller(模型-视图-控制器)架构模式的开源Web应用框架,它允许开发者构建高度可扩展且清晰的Web...

    MVC国际化,MVC多语言,.NET多语言

    在.NET框架中,MVC(Model-View-Controller)架构是一种流行的设计模式,用于构建可扩展、可维护的Web应用程序。MVC国际化的实现是为了使应用程序能够支持多种语言,包括中英文切换,这对于全球化的网站和应用至关...

    MVC2.0入门必读教程程序源码

    MVC2.0入门必读教程程序源码 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了。可以说自动推出以来,一直广受关注。在经历了漫长的Preview之后,前几天终于推出了其beta版。并且在官方文档中,微软...

    C++实现简单的MVC框架

    在IT行业中,MVC(Model-View-Controller)是一种广泛应用于软件开发的架构模式,尤其在Web应用领域中。这个模式将应用程序分为三个主要部分,每个部分都有明确的责任,从而提高了代码的可维护性和可扩展性。本项目...

    C# MVC入门实例 MVC留言本

    **C# MVC 入门实例:MVC留言本** C# MVC(Model-View-Controller)框架是微软为构建Web应用程序提供的一种强大的设计模式。它将应用逻辑、用户界面和数据处理分离开来,使代码更易于管理和维护。在这个入门实例中,...

    如何使用jquery / ajax序列化表中的数据并将其作为参数传递给MVC中的控制器方法?

    我有一个包含表的强类型局部视图,我希望将其整个数据作为控制器方法中的参数传递,该控制器方法会将数据导出到.xls文件。 现在,我如何使用jQuery / ajax序列化数据以将表数据传递给ActionMethod。...

Global site tag (gtag.js) - Google Analytics