ViewModel和Controller之间有什么区别?

时间:2009-12-11 21:07:52

标签: ruby-on-rails asp.net-mvc model-view-controller

一方与另一方的责任是什么? 一个与另一个应该采用什么样的逻辑? 哪一个打服务和数据库? 如何确定我的代码是应该放在viewmodel还是控制器中?

为了记录,我使用的是ASP MVC,但由于问题是架构,我不相信我使用的是哪种语言或框架。我邀请所有MVC回复

7 个答案:

答案 0 :(得分:23)

ViewModel是一个模式,用于处理View的表示逻辑和状态,控制器是任何MVC框架的基本部分之一,它响应任何http请求并编排所有后续操作,直到http响应。

ViewModel模式:More info

  

在ViewModel模式中,UI和   任何UI逻辑都封装在一个   视图。 View观察ViewModel   它封装了表示逻辑   和州。 ViewModel依次   与模型交互并充当   它和它之间的中间人   图。

View <-> ViewModel <-> Model

控制器(来自前端控制器模式):More Info

  

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

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

- 平原差异: -

  • ViewModel是可选的 模式控制器是必须的,如果 你是MVC的方式。
  • ViewModel封装 表达逻辑和状态,The 控制器编织所有 申请流程。

答案 1 :(得分:8)

enter image description here

  • ViewModel可以位于客户端,也可以位于服务器端。 无论它在哪里,viewmodel的唯一目的是玩 演示数据。
  • 在MVC架构中,Viewmodel不是强制性的,但如果没有控制器,则无法处理来自客户端的请求。
  • 可以将控制器可视化为客户端和服务器之间的主要接口,以从服务器获取任何响应。它处理客户端请求,从存储库中提取数据,然后准备视图数据。 Viewmodel可以被视为视图数据处理器/演示者,因此可以更加雄辩地管理视图。
  • 在Web应用程序的整体上下文中,我们可以说控制器是应用程序请求处理程序,而viewmodel只是UI处理程序。

答案 2 :(得分:2)

模型 - 视图 - 控制器(MVC)是一种架构设计模式,主要用于将业务逻辑与表示分离。基本上,你不希望你的后端接触你的前面。它通常看起来像这样:

alt text

这样做的原因是,通过分离后端和前端,您不会将用户界面直接绑定到数据/工作。这允许您在不影响所述逻辑的情况下将新接口放到业务逻辑上。此外,它还提高了测试的便利性。

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

修改

由于您稍微更新了一下问题,我会更新我的答案。 MVC的分离没有完美的科学。但是,有一些好的经验法则。例如,如果您正在谈论GUI组件,那可能就是一个视图。 (你在谈论外观和感觉,可用性等)如果你在谈论数据和房子的“业务”方面(数据库,逻辑等),你可能指的是一个模型。并且,任何控制两者之间相互作用的东西很可能都是控制者。

此外,应该注意的是,虽然视图和模型通常是“物理”分离的,但控制器可以在有意义的情况下与视图一起存在。

当你说MVC的框架(甚至语言)无关紧要时,你是对的。模式本身与语言无关,并且真正描述了构建系统的方法。

希望有所帮助!

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

Trygve Reenskaug因发明MVC而广受赞誉。 N. Alex Rupp的文章Beyond MVC: A new look at the servelet architecture包括MVC的历史。在Reenskaug 1978年在施乐帕洛阿尔托研究中心工作的一节中,有一篇链接到他的论文Thing-Model-View-Editor: an Example from a planningsystem。这些作品就是这样描述的。

<强>事

  

用户感兴趣的东西。它可以是具体的,如房子或综合的   电路。它可能是抽象的,就像一个新想法或关于论文的意见。它可能是一个整体,   像计算机或部件,如电路元件。

<强>模型

  

模型是计算中数据形式的抽象的主动表示   系统

查看

  

对于任何给定的模型,都附加了一个或多个视图,每个视图都能够   在屏幕和硬拷贝上显示模型的一个或多个图形表示。一个   View也能够在合理关联的Model上执行此类操作   有了那个观点。

<强>编辑

  

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

Rupp将Reenskaug的编辑识别为控制器工具

  

MVC Triads出现在SmallTalk-80中。该模型是现实世界概念的抽象,视图是其视觉表示,控制器是允许用户与其交互的按钮和滑动条(从而“控制”视图)。三合一中的所有部分都是相互关联的,并且可以与其他两个部分进行通信,因此不涉及分层或抽象。从那时起,Reenskaug“倾向于使用术语而不是控制器”。根据他的笔记,这些是他在以后的实施中使用的术语

答案 5 :(得分:0)

模型代表您的数据及其操作方式。因此,模型触及数据库。

查看是您的用户界面。

Controler是他们之间的粘合剂。

答案 6 :(得分:-3)

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

模型=数据(数据库表)

View = HTML,CSS,JavaScript等

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

以简单易懂的方式,

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