MVC和MMVC架构
初因
原文地址:https://www.aclihui.com
深入理解MVV 架构和MMVC架构,为以后软件设计打下基础。
MVC架构
M:Model模型 V: View视图 C:Controller控制器
模型(来自维基百科的解释,注1)
M:用于封装与应用程序的业务逻辑相关的数据以及对数据的解决方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或者是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必需事前在此 Model 上注册,从而,View 可以理解在数据 Model 上发生的改变。(比方:观察者模式(软件设计模式))
视图
V:能够实现数据有目的的显示(理论上,这不是必须的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因而应该事前在被它监视的数据那里注册。
控制器
起到不同层面间的组织作用,用于控制应用程序的流程。它解决事件并作出响应。“事件”包括客户的行为和数据 Model 上的改变。
展现图:
image
此时我们发现,相互关系如图所示。
M负责控制View的显示,V需要时刻监视M的情况,而C则为相事件对M进行解决。
总结
MVC架构是一种业务逻辑和数据分离的方法,这个方法假设前提是假如业务逻辑被聚集到一个部件里面,而且页面和客户围绕数据的交互能被改进和个性化而不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入,解决和输出功能在一个逻辑的图形化界面结构中。(注2)
MMVC
MMVC是在MVC中间加入一层ViewModel起到适配(少量Model建模为了与其余系统实现完全隔离,存储的只是id,此处需要根据id去组装起所需的数据),隔离扩展。
M
完全隔离的Model只会被引用(监视),不会引用外部的东西,通常只会对需要的数据进行建模(比方id),不需要的数据则不需要进行建模。
View
承担各种界面事件交互逻辑,其核心关键词是:数据展现、操作。其中除了特定的操作、交互功能外,最为重要的三个功能点,即是初始化、刷新、返回值、事件。
ViewModle
网站上没有多少详情
C
和MVC架构基本相同。
引用
2.https://www.cnblogs.com/suriyel/articles/3332408.html
MVC实现
MFC
微软所推出的MFC Document/View架构是早期对于MVC模式的实现,MFC将程序分成CView以及CDocument两大类别,其中的Document对应MVC中的 Model ,View 相当于MVC中的 View+Controller,再加上CWinApp类别,合成三大项。但是基本上MFC是一个失败的MVC模式作品。
因为MFC之下的Document/View 定义过于模糊,未将Controller(MessageMap)部分取出,因而 Controller 可以置入 View 或者Document,但不论置入哪一方面,都会与View或者Document绑死,没有弹性。
Java
Java 平台企业版 (J2EE)
和其余的各种框架不一样,J2EE为模型对象(Model Objects)定义了一个规范。
视图(View)
在J2EE应用程序中,视图(View)可能由Java Server Page(JSP)担任。生成 View 的代码则可能是一个servlet的一部分,特别是在用户端服务端交互的时候。
控制器(Controller)
J2EE应用中,Controller 可能是一个servlet。
除了可直接以J2EE来撰写外,亦可用其余框架来撰写,常见的有Struts2、Spring Framework……等等。
模型(Model)
Model 则是由一个实体Bean来实现。
Java Swing
Swing是一个标准的MVC结构. ComponentUI代表 View, 负责描画组件. 组件尤其 Model 层, 比方JTextField的Document, JTable的TableModel, JTree的TreeModel等等. 而Control可能不是很显著, 我们或者许可以简单的将其Event机制看作一个Swing团队开发给开发者的 Controller。
作为Java开发者, 假如想了解MVC的结构, 学习Swing确实是个不错的选择.
.NET
ASP.NET
在ASP.NET中,针对视图(View)和控制器(Controller)的模式没有被很好地定义。而模型(Model)则留给开发者去设计。
视图(View)
ASPX和ASCX文件被用来解决 View 的职责。在这个设计中 View 实际上是从 Controller 继承而来。这个和Smalltalk的实施有所不同,在Smalltalk中不同的类都有指针互相指向对方.
控制器(Controllers)
Controller 的职责被分割成两部分。事件(Event)的产生和传输是框架的一部分,更明确的说是Page和Control两个类。而事件的解决则在分离的代码中实现。
模型(Model)
ASP.NET 不严格需要一个 Model。开发者可以自行选择创立一个 Model 类,但是很多人选择放弃这一步,直接把事件解决放在 Controller 里解决任何计算、数据保存等等。但用 Model 来包含商业逻辑和数据访问是可实现的。
ASP.NET MVC
ASP.NET MVC,在2013年10月17日稳固版本已到5.0版。[3]
此外,在ASP.NET MVC中,一般情况下Model通常搭配LINQ to SQL类别(使用O/R Designer工具所制作而成的DBML档)或者ADO.NET实体数据模型(Entity Data Model,使用ADO.NET Entity Framework制作出的EDMX档)来实现。
Windows Forms
在WinForms中,这个针对视图(View)和控制器(Controller)的模式已经很好的定义。而模型(Model)则留给开发者去设计。
视图(View)
由Form或者者Control类继承来的一个类解决 View 的职责。在WinForm这个例子中 View 和 Controller 被编译在同一个类中,这个和ASP.NET不同。
控制器(Controller)
Controller 的职责被分割成三部分。事件(Event)的产生和传输是操作系统的一部分。在.Net框架中Form和Control类将不同的事件转发给相应的事件解决器。而事件的解决则在分离的代码中实现。
模型(Model)
就像ASP.NET一样,WinForm不严格需要一个 Model。开发者可以自行选择创立一个 Model 类,但是很多人选择放弃这一步,直接把事件解决放在 Controller 里解决任何计算、数据保存等等。也就是说用Model来包含商业逻辑和数据访问。
Perl
Catalyst和Jifty是透过Perl语言所开发出来的Web Framework,都采用Model-View-Controller 架构。Catalyst 本身只是做了 Controller,View 和 Model 让开发者自由选用 CPAN 上的板块开发,例如 Template 和 Template Declare 都可用来产生视图。Jifty 将 MVC 完全实做完成,View 的部分在早期版本使用 Mason 实做,较新版本使用 Template Declare。
Ruby on Rails
Ruby on Rails是透过Ruby语言所开发出来的 Web Framework,也是采用 Model-View-Controller 架构。Model 部分使用 Active Record 概念实做,加上 Migration 机制,使得其 Model 结构非常容易控制。
Python
Python 有许多的 MVC 架构。最常用的有 Django 和 TurboGears。
JavaScript
Backbone.js
Angular.js
Ember.js
JavaScriptMVC
Model-View-Controller (MVC) with JavaScript
PHP
CakePHP
CodeIgniter
prado
symfony
Yii Framework
Zend Framework
Phalcon
Laravel
ThinkPHP
ActionScript 3
PureMVC Standard for ActionScript 3
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » MVC和MMVC架构