ViewModel和Controller之间有什么区别?

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

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

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

ViewModel模式: 更多信息

在ViewModel模式中,UI和任何UI逻辑都封装在View中。 View观察一个封装表示逻辑和状态的ViewModel。 ViewModel又与Model交互,并充当它与View之间的中介。

View <-> ViewModel <-> Model 

控制器(来自前端控制器模式): 更多信息

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

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

– 平原差异: –

  • 虽然ViewModel是一个可选模式,但如果你采用MVC方式,那么Controller是必须的。
  • ViewModel封装了表示逻辑和状态,Controller编排了所有应用程序流。

在此处输入图像描述

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

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

替代文字

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

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

编辑:

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

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

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

希望有所帮助!

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

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

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

Trygve Reenskaug因发明MVC而广受赞誉。 N. Alex Rupp的文章Beyond MVC:对servlet架构的一个新面貌包括MVC的历史。 在Reenskaug 1978年在Xerox Palo Alto研究中心工作的一节中,有一篇链接到他的论文Thing-Model-View-Editor:一个来自规划系统的例子 。 那些碎片就是这样描述的。

事情

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

模型

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

视图

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

编辑

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

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

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

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

View是您的UI。

控制器是它们之间的粘合剂。

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

Model = Data(数据库表)

View = HTML,CSS,JavaScript等

Controller =主逻辑,Model&View之间的契约。

简单易懂的术语,

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