2009-12-11 110 views
22

一方与另一方的责任是什么? 什么样的逻辑应该在一个和另一个之间去? 哪一个命中服务和数据库? 如何决定我的代码应该放在视图模型还是控制器中?ViewModel和Controller有什么区别?

为了记录,我使用的是ASP MVC,但由于这个问题是架构性的,我不相信它关系到我使用的是什么语言或框架。我邀请所有MVC作出回应

回答

23

ViewModel是一种模式,用于处理视图的表示逻辑和状态,控制器是任何MVC的基础部分之一框架,它响应于任何HTTP请求和orchest所有后续操作,直到http响应

的视图模型模式:More info

在视图模型图案中,UI和 任何UI逻辑被封装在一个 查看。该视图观察封装了表示逻辑 和状态的ViewModel 。 ViewModel依次与 进行交互,并作为 与其之间的中介和 视图。

View <-> ViewModel <-> Model 

的控制器(从前端控制器模式附带):More Info

它 “提供了一个集中的切入点 处理的请求。”

HTTP Request -> Controller -> (Model,View) 

--Plain差异: -

  • 虽然视图模型是一个可选 模式控制器是必须的,如果 你要去的MVC方式。
  • ViewModel封装了 表示逻辑和状态,该控制器编排了所有应用程序流程的 。
0

模型表示您的数据以及它如何被操纵。因此,模型触及数据库。

查看是您的用户界面。

控制器是它们之间的胶水。

1

应调用一些逻辑和模型来生成一些数据(结构化或半结构化)。从这个数据返回的页面/ JSON /等。通常只有基本的概述逻辑。

第一部分(创建数据)由控制器完成(通常通过模型)。第二部分 - 由视图。 ViewModel是在控制器和视图之间传递的数据结构,通常只包含访问器。

2

模型 - 视图 - 控制器(MVC)是一种架构设计模式,主要用于将演示文稿中的业务逻辑分开。基本上,你不希望你的后端碰到你的前端。它通常是这样的:

alt text

这样做的原因是因为,通过分离后端和前端,你不要直接配合你的用户界面,您的数据/工作。这使您可以将新界面放到业务逻辑上,而不会影响所述逻辑。另外,它还提高了测试的便利性。

MVC派上用场的一个简单例子 - 假设您拥有管理公司财务的应用程序。现在,如果你正确地使用了MVC,你可以有一个前端位于某个金融家的办公桌前,让他处理交易,管理财务状况等。但是,由于业务逻辑是分开的,因此您还可以提供一个前端给你的首席执行官的黑莓,让他看到业务的现状。由于两个前端不同,他们可以做不同的事情,同时仍然提供(不同类型的)访问数据。

编辑:

既然你更新你的问题一点,我会更新我的答案。 MVC的分离没有完美的科学。然而,有一些很好的经验法则。例如,如果您正在讨论GUI组件,那可能是一个视图。 (你是在谈论外观和感觉,可用性等)如果你正在谈论数据和房屋的“商业”方面(数据库,逻辑等),你可能指的是一个模型。而且,控制两者之间交互的任何东西都可能是一个控制器。

另外,应该注意的是,虽然视图和模型通常是“物理上”分离的,但控制器可以在视图有意义时存在。

当你说MVC的框架(甚至语言)并不重要时,你是正确的。模式本身是语言不可知的,并且真正描述了构建系统的方式。

希望有帮助!

+0

我喜欢短语“language agnostic”。 – 2009-12-11 21:41:28

+0

谢谢,是否有可能扩大视图模型和控制器之间的差异? – MedicineMan 2009-12-11 22:04:43

1

我认为学习收到的教义有一定的价值。但是理解这种学说如何成为现实也是有价值的。

Trygve Reenskaug被广泛认为是发明MVC。 N.亚历克斯鲁普的文章Beyond MVC: A new look at the servelet architecture包括MVC的历史。在Reenskaug 1978年在施乐帕洛阿尔托研究中心工作的一节中,他的论文链接Thing-Model-View-Editor: an Example from a planningsystem。那里的东西都是这样描述的。

事情

东西是感兴趣的用户。它可以是具体的,如房屋或集成电路。它可能是抽象的,就像是关于论文的新想法或观点。它可以是一个整体,像计算机一样,或者像电路元件一样是一个零件。

模型

模型是在数据的形式的抽象的在计算活性表示 系统

查看

要任何给定的模型附有一个或多个视图,每个视图能够在屏幕上和硬拷贝上显示模型的一个或多个图形表示。 A 视图也能够对与该视图有关的模型进行这样的操作,该模型与 有合理关联。

编辑

一个编辑器是一个用户和一个或多个视图之间的接口。它为用户提供了一个合适的命令系统,例如根据当前上下文以菜单的形式动态改变 。它为视图提供必要的协调和命令消息。

鲁普标识Reenskaug的编辑作为控制器工具

MVC Triads出现在SmallTalk-80中。该模型是现实世界概念的抽象,视图是其视觉表示,控制器是允许用户与之交互(从而“控制”视图)的按钮和滑动条。黑社会中的所有作品都是相互关联的,可以与其他两件作品进行交流,因此没有涉及分层或抽象。从那以后,Reenskaug“宁愿使用术语而不是控制器。“根据他的笔记,这些是他在以后的实现中使用的术语

-3

MVC代表模型,视图,控制器。

模型=数据(数据库表)

视图= HTML,CSS,JavaScript的等

控制器=主逻辑,模型&视图之间的契约。

简单和可抓取方面,

MVC允许你开发你的应用程序中,你的业务数据和演示数据分开的方式。有了这个,开发人员和设计人员可以在MVC应用程序上独立工作而不会发生工作冲突。 MVC也使您的应用程序利用OOP。

6

enter image description here

  • 视图模型可以是在客户端以及服务器侧。 无论在哪里,视图模型的唯一目的是播放演示数据 。
  • 在MVC体系结构中,Viewmodel不是强制性的,但如果没有控制器,则无法处理来自客户机的请求。
  • 控制器可以被视为客户端和服务器之间的主要接口,以获得服务器的任何响应。它处理客户端请求,从存储库中提取数据,然后准备视图数据。 Viewmodel可视化为视图数据处理器/展示器,从而提供一个界面更加雄辩地管理视图。
  • 在Web应用程序的整体上下文中,我们可以说控制器是应用程序请求处理程序,而viewmodel只是UI处理程序。
+1

我着迷于这个问题,因为我想知道MVC和MVVM之间的区别是什么,但是如果我是正确的,根据您的例子,MVVM是MVC的一个子集。 – 2016-10-27 09:36:34

+0

@OgierSchelvis,不,他们是不同的,你也可以有MVVMC(两者之间的混合)。 – 2017-12-03 17:10:04