`
MingDaw
  • 浏览: 2246 次
文章分类
社区版块
存档分类
最新评论
阅读更多
MVC模式在编程中的应用,是一个很了不起的主意。“数据模型(Model)”可以封装与应用程序的业务逻辑相关的数据及对数据的处理方法;“视图层(View)”能够实现数据有目的的显示;“控制器(Controller)”能够在不同层面间起到组织作用,对应用程序的流程进行控制。

不过,可能你在使用这种三层架构模式的过程中会逐渐迷惑。因为有很多代码你不知道把它放哪,就只好把它放到控制层,最后发现在控制层中塞了太多的代码。

LinkedIn的软件工程师Conrad Irwin也遇到同样的问题,于是他开始使用另一种模式:MOVE,即Models(模型)、Operations(操作)、Views(视图)、Events(事件)。

近日Conrad Irwin在个人博客上分享了关于这种模式的一些观点。



概述

Irwin结合上图对MOVE模式先作了简单定义:

Models,封装该应用程序中知道的一切;
Operations,封装该应用程序要做的一切;
Views,帮助用户与应用程序完成交互;
Events,用于安全地连接所有这些组件。
为了避免意大利面条式的代码,图中标示出了对哪种类型的对象进行操作是允许的。例如,视图允许监听由模型产生的事件;操作允许修改模型,但模型不应涉及视图或操作。

Models(模型)

这里以一个“User”对象为原型,它至少应用有一个Email地址,也可能有用户名和电话号码。

在一个MOVE模式的Models中只包装知识。这意味着除了Get和Set功能,它们可以包含检查用户密码是否正确这样的方法,但不会包含把密码保存到数据库或传递给外部API这样的功能,因为后面这些工作将由Operations来完成。

Operations(操作)

对应用程序来说,一个常见的操作是用户登陆。这实际上是由两个子操作组成:首先从用户那里获得邮件地址和密码,然后从数据库载入“user”模型并检查密码是否匹配。

Operations是MOVE模式中的行动者。它负责修改模型,在正确的时间显示正确的视图,以及响应由用户交互引发的事件。在一个分解良好的应用程序中,每个子操作都可以独立运行。

采用这种方式的操作有一点很令人振奋,即程序启动后,整个应用本身就可以被当作一个Operations。它会根据需要生成尽可能多的子操作,其中每个子操作都并行地运行。当所有子操作都完成时,程序也便退出。

Views(视图)

登陆页面即是一个视图,它负责显示一些文本框给用户。当用户点击“登陆”按钮时,视图将产生一个“loginAttempt”事件,其中包含用户输入的用户名和密码。

用户能够看到的内容,以及能感受到的互动都由视图提供支持。它们会以一种用户能理解的形式呈现应用反馈,同时还能将简单的用户交互转换成有意义的事件。更重要的是视图不会直接改变模型,它们只是向Operations发起事件,然后通过监听等待由模型发起的事件。

Events(事件)

当用户登陆时,视图会发起“loginAttempt”事件。在登陆操作完成后,“currentUser”模型会发起一个事件通知应用登陆状态已改变。

事件监听让MOVE(及MVC)实现控制反转,允许模型更新视图。这是一种强大的抽象技巧,允许组件互不干扰地耦合在一起。

为什么是现在?

当然,Conrad Irwin并不想被人认为自己是在暗示MVC模式很差,这种大型应用程序架构在过去的几十年里确实非常成功。不过几十年后的今天,新的编程技术已经变得越来越流行,所以你也会在使用过程中逐渐产生一些疑惑。

MVC模式确实很了不起,但它毕竟是几十年前为老的技术而设计。MOVE模式是在其基础上的升级,让你可以更好地利用当前已有的新工具。
分享到:
评论

相关推荐

    PHP+MVC_blog.7z

    实现这个功能通常涉及到处理文件上传的PHP函数,如`move_uploaded_file()`,以及对上传文件的大小、类型等进行验证的逻辑。 **分页功能** 为了提高用户体验和页面加载速度,博客系统通常会采用分页显示文章列表。...

    Spring.MVC.Beginner's.Guide.2nd.Edition.2016.7.pdf

    From here, we move on to controllers, views, validations, Spring Tag libraries, and more. Finally, we integrate it all together to develop a web application. You’ll also get to grips with testing ...

    Spring的MOVE进行Junit单元测试

    3. **Controller**:控制器接收用户的请求,处理这些请求,并与模型和视图进行交互。在Spring MVC中,我们使用@Controller注解来标记控制器类。 在进行单元测试时,我们的目标是隔离每个组件并独立测试它们。对于...

    [影音娱乐]Silverlight实现的MoveBox游戏_movebox(ASP.NET源码).rar

    在这个MoveBox游戏中,ASP.NET可能用于处理用户请求,管理服务器端逻辑,以及与数据库交互。 接着,我们关注Silverlight的特性。Silverlight支持XAML(可扩展应用程序标记语言),这是一种声明性语言,用于定义用户...

    ASP.NET MVC CHESS GAME:Asp.Net MVC国际象棋游戏-开源

    6. **路由系统**:ASP.NET MVC的路由系统允许开发者定义URL模式与控制器方法的映射。在国际象棋应用中,路由可能定义了如“/Chess/Move”这样的URL,用于处理棋子移动请求。 7. **AJAX和异步处理**:为了提供更好的...

    ASP.NET-[影音娱乐]Silverlight实现的MoveBox游戏.zip

    【描述】:这个压缩包文件包含了一个使用ASP.NET技术与Silverlight框架开发的MoveBox游戏。Silverlight是微软推出的一种强大的富互联网应用程序(RIA)平台,主要用于创建交互式、媒体丰富的Web应用程序。MoveBox...

    ASP.NET源码——[影音娱乐]Silverlight实现的MoveBox游戏.zip

    【学习路径】:对于想要深入了解这个项目的开发者,建议首先熟悉ASP.NET的基础概念和MVC架构,然后学习Silverlight的基本使用,包括XAML(eXtensible Application Markup Language)语法和编程模型。接着,可以逐个...

    Move2008 Mobile Application Engine

    这可能涉及到学习框架设计模式,如MVC(模型-视图-控制器)或MVVM(模型-视图-视图模型)。 3. **编译与运行**:根据项目提供的编译说明,将源码编译为可执行文件,然后在模拟器或实际设备上测试引擎的功能。 4. *...

    基于GEF的MiniGUI可视化开发工具设计

    基于GEF的MiniGUI可视化开发工具设计 ...GEF基于MVC框架,可以方便地实现drop/drag、undo/redo、move、delete、resize等图形编辑器的基本功能,并且提供了常用的布局器,非常适合用于开发所见即所得的界面编辑器。

    Getting Started with Knockout.js for .NET Developers(PACKT,2015)

    Knockout MVC is a library for ASP.NET MVC that helps developers to move their entire business logic to the server. With practical and accessible guidance, you will learn the skills necessary to ...

    MVC2MT1复习。,,,,,,,,,,。

    在提供的代码示例中,`textBox2_MouseDown`事件触发`textBox2.DoDragDrop(textBox2.Text, DragDropEffects.Move)`,启动了拖放过程。 2. **窗体控件调整大小**:在Windows Forms开发中,`Anchor`属性用于控制控件在...

    rest-nodejs-catalog:使用节点和 MOVE 模式编目 Restful api

    在这个名为"rest-nodejs-catalog"的项目中,我们关注的是如何利用Node.js来实现这一目标,同时应用了MOVE设计模式而非传统的MVC(Model-View-Controller)模式。下面将详细介绍这个项目及其相关知识点。 首先,让...

    myeclipse2015中与tomcat有关的问题的相关问题

    以上就是针对“myeclipse2015中与tomcat有关的问题”的一些知识点,包括配置Tomcat、自定义端口、解决端口冲突、配置服务器、运行和调试项目以及JSP学习相关的内容。希望能够帮助读者在MyEclipse中更好地使用Tomcat...

    JavaWeb综合练习

    【JavaWeb综合练习】是一个基于Java Web技术的...这个练习涵盖了Java Web开发的多个重要知识点,包括JDBC数据库操作、Servlet请求处理、MVC架构的应用以及HTML页面的创建,是学习和巩固Java Web技术的良好实践项目。

    move-troll:一个React和Flux的小例子..

    “move-troll”项目展示了如何将React与Flux结合使用来创建一个小型应用。这个例子可能包括以下几个关键部分: 1. **Actions**: 这些是用户操作的表示,如按钮点击或其他交互事件。当触发一个动作时,它会发送到...

    Continuous Delivery & Continuous Integration

    The authors first examine the concept of CI and its practices from the ground up and then move on to explore other effective processes performed by CI systems, such as database integration, testing, ...

    Learning Django Web Development(PACKT,2015)

    It loosely follows the MVC pattern and adheres to the Don't Repeat Yourself principle, which makes a database-driven application efficient and highly scalable, and is by far the most popular and ...

    java俄罗斯方块开发文档.docx

    - **MVC模式**:将游戏逻辑分离为Model(模型)、View(视图)和Controller(控制器)三部分。 - Model负责游戏状态的管理和更新。 - View负责图形界面的展示。 - Controller处理用户输入,调用Model和View的...

    Modern JavaScript Applications

    The book begins by covering a single page application that builds on the innovative MVC approach using AngularJS. As we move forward, the book shows you how to develop an enterprise-level application ...

Global site tag (gtag.js) - Google Analytics