一个与另一个的职责是什么? 一个与另一个应该放什么样的逻辑? 哪一个会涉及服务和数据库? 如何决定我的代码应该放在ViewModel还是Controller中?
记录一下,我正在使用ASP MVC,但由于问题是架构性的,我认为使用何种语言或框架并不重要。我邀请所有MVC来回答。
一个与另一个的职责是什么? 一个与另一个应该放什么样的逻辑? 哪一个会涉及服务和数据库? 如何决定我的代码应该放在ViewModel还是Controller中?
记录一下,我正在使用ASP MVC,但由于问题是架构性的,我认为使用何种语言或框架并不重要。我邀请所有MVC来回答。
View <-> ViewModel <-> Model
控制器(来自前置控制器模式):了解更多
它“提供了一个集中的入口点来处理请求。”
HTTP Request -> Controller -> (Model,View)
--普通区别:--
我认为学习已有的教条是有价值的,但了解教条形成的过程也很有价值。
Trygve Reenskaug被广泛认为是MVC的发明者。N. Alex Rupp的文章《超越MVC:Servlet架构的新视角》中包含了MVC的历史。在Reenskaug于1978年在施乐帕洛阿尔托研究中心的工作部分中,有一个链接指向他的论文《Thing-Model-View-Editor: an Example from a planningsystem》。其中这些部分被描述如下:
Thing
对用户感兴趣的东西。它可以是具体的,比如房子或集成电路。它可以是抽象的,比如新想法或对一篇论文的看法。它可以是整体,比如计算机,也可以是部分,比如电路元件。
Model
模型是计算系统中以数据形式呈现抽象的主动表示
View
对于任何给定的模型,都会附加一个或多个视图,每个视图能够在屏幕和硬拷贝上显示一个或多个模型的图形表示。视图还能够执行与该视图合理相关的模型操作。
Editor
编辑器是用户和一个或多个视图之间的接口。它为用户提供适当的命令系统,例如菜单,可以根据当前上下文动态更改。它为视图提供必要的协调和命令消息。
Rupp将Reenskaug的Editor标识为Controller或Tool。
MVC三元组出现在SmallTalk-80中。模型是现实世界概念的抽象,视图是其可视化表示,控制器是允许用户与之交互(从而“控制”视图)的按钮和滑块。三元组中的所有部分都相互连接,并且可以与另外两个部分通信,因此不存在分层或抽象。自那时以来,Reenskaug“更喜欢使用工具这个术语而不是控制器”。根据他的笔记,这些是他在后来的实现中使用的术语。
需要调用一些逻辑和模型来生成一些数据(结构化或半结构化)。根据这些数据,通常只使用简单的大纲逻辑来创建返回的页面/JSON等。
第一部分(创建数据)由控制器完成(通常通过模型实现)。第二部分由视图完成。ViewModel是在控制器和视图之间传递的数据结构,通常只包含访问器。
模型代表您的数据以及它如何被操作。因此,模型会涉及到数据库。
视图是您的用户界面。
控制器是它们之间的粘合剂。
MVC代表模型(Model),视图(View)和控制器(Controller)。
模型=数据(数据库表)
视图= HTML,CSS,JavaScript等
控制器=主逻辑,是模型和视图之间的契约。
简单易懂地说,MVC允许您以一种方式开发应用程序,使您的业务数据和演示数据分离。有了这个,开发人员和设计师可以独立地在MVC应用程序上工作,而不会相互冲突。 MVC还使您的应用程序可用于面向对象编程。