Ruby on rails 什么';ViewModel和Controller之间的区别是什么?

Ruby on rails 什么';ViewModel和Controller之间的区别是什么?,ruby-on-rails,asp.net-mvc,model-view-controller,Ruby On Rails,Asp.net Mvc,Model View Controller,一方对另一方的责任是什么? 一种逻辑与另一种逻辑应该是什么样的? 哪一个访问服务和数据库? 如何确定代码应该放在viewmodel还是控制器中 作为记录,我使用的是ASP MVC,但由于问题是体系结构,我认为我使用的语言或框架并不重要。我邀请所有MVC回应模型代表您的数据及其操作方式。因此,模型涉及数据库 视图是您的UI 控制器是它们之间的粘合剂。应该调用一些逻辑和模型来生成一些数据(结构化或半结构化)。从这些数据创建返回的页面/JSON/etc,通常只使用基本的大纲逻辑 第一部分(创建数据)由

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


作为记录,我使用的是ASP MVC,但由于问题是体系结构,我认为我使用的语言或框架并不重要。我邀请所有MVC回应

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

视图是您的UI


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

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

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

模型-视图-控制器(MVC)是一种架构设计模式,主要用于将业务逻辑与表示分离。基本上,您不希望后端与前端接触。它通常如下所示:

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

一个简单的例子说明了MVC在哪里派上了用场——假设您有一个管理公司财务的应用程序。现在,如果你正确使用MVC,你可以在某个金融家的办公桌上设置一个前端,让他处理交易、管理财务等。但是,由于业务逻辑是独立的,你还可以为你的CEO的黑莓手机提供一个前端,让他看到业务的当前状态。因为两个前端是不同的,所以它们可以在提供(不同类型的)数据访问的同时做不同的事情

编辑:

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

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

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


希望有帮助

我认为学习接受主义是有价值的。但理解该学说是如何形成的也有价值

Trygve Reenskagug被广泛认为是MVC的发明者。亚历克斯·鲁普的文章包括了MVC的历史。在关于林斯考格1978年在施乐帕洛阿尔托研究中心工作的一节中,有一个链接指向他的论文。这些作品是这样描述的

东西

用户感兴趣的东西。它可以是混凝土的,像一栋房子或是一个整体 巡回赛。它可以是抽象的,就像一篇论文的新想法或观点。它可能是一个整体, 像一台计算机或一个部件,像一个电路元件

型号

模型是在计算环境中以数据形式对抽象的主动表示 系统

查看

对于任何给定的模型,都会附加一个或多个视图,每个视图都能够 在屏幕和硬拷贝上显示模型的一个或多个图示。A. View还能够对合理关联的模型执行此类操作 有这种看法

编辑器

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

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

MVC三位一体出现在SmallTalk-80中。模型是真实世界概念的抽象,视图是它的视觉表示,控制器是允许用户与其交互的按钮和滑块(从而“控制”视图)。三元组中的所有片段都是相互关联的,可以与其他两个片段进行通信,因此不涉及分层或抽象。从那时起,Reenskagug“更喜欢使用术语工具而不是控制器”。根据他的注释,这些术语是他在以后的实现中使用的


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

ViewModel模式:

在ViewModel模式中,UI和 任何UI逻辑都封装在 看法视图观察一个ViewModel 它封装了表示逻辑 和国家。依次创建ViewModel 与模型交互并充当 中间人,中间人,中间人 视图

--明显的区别:--

  • 而ViewModel是可选的 如果需要,控制器是必须的 你正在走MVC的道路
  • ViewModel将被封装
    View <-> ViewModel <-> Model
    
    HTTP Request -> Controller -> (Model,View)