Model view controller MVC:为什么我们需要;控制员;,或者什么时候我们应该使用这种模式?

Model view controller MVC:为什么我们需要;控制员;,或者什么时候我们应该使用这种模式?,model-view-controller,client-server,application-design,Model View Controller,Client Server,Application Design,我读过很多关于MVC的出版物,但我仍然不清楚为什么我们需要“控制器” 我通常以客户机-服务器模式编写应用程序: 服务器包含所有的业务逻辑,它对gui一无所知。它完成了主要任务,并且尽可能便于携带 客户端是一个GUI,它绑定到服务器,与用户交互,从用户向服务器发送命令 我喜欢这种体系结构,但我不明白为什么人们真的需要在客户端和服务器之间增加一种媒介,即控制器 UPD:简单示例:假设我们需要编写一些数据记录器。数据来自COM端口,通过某种协议进行编码。需要在一个简单的日志窗口中显示收到的消息 我将如

我读过很多关于MVC的出版物,但我仍然不清楚为什么我们需要“控制器”

我通常以客户机-服务器模式编写应用程序:

服务器包含所有的业务逻辑,它对gui一无所知。它完成了主要任务,并且尽可能便于携带

客户端是一个GUI,它绑定到服务器,与用户交互,从用户向服务器发送命令

我喜欢这种体系结构,但我不明白为什么人们真的需要在客户端和服务器之间增加一种媒介,即控制器

UPD:简单示例:假设我们需要编写一些数据记录器。数据来自COM端口,通过某种协议进行编码。需要在一个简单的日志窗口中显示收到的消息

我将如何做到:

服务器包含以下项目:

  • Data\u receiver
    :实际上从COM端口接收原始数据,但它是接口,因此我们可以创建另一个类,从任何其他源接收数据
  • Data\u decoder
    :获取原始数据并返回解码后的消息,它也是一个接口,因此我们可以轻松更改编码协议
  • 数据核心
    :使用
    数据接收器
    数据解码器
    的实例,向客户端发送信号
客户端包含以下项:

  • Appl core:创建
    数据_接收器
    (连接到COM端口的那一个)、
    数据_解码器
    数据_核心
    (它引用
    数据_接收器
    数据_解码器
    实例),还创建GUI简单日志窗口(它引用
    数据_核心
  • GUI简单日志窗口:绑定到
    数据\u核心
    ,即侦听它发出的信号,并显示接收到的数据
正如我所了解的关于MVC的内容,GUI实际上不应该从
Data\u core
获取接收到的消息,因为控制器应该这样做,然后将数据传递给GUI。但是,如果GUI直接从模型中获取这些数据,会发生什么不好的事情呢?

“客户机-服务器”与MVC无关

我是这样理解的:

  • 模型是您构建数据的方式
  • 视图是可见的表示形式。(图形用户界面)
  • 控制器使用该逻辑控制视图和/或其他逻辑
其背后的思想是将视觉表现从逻辑中分离出来。因此,当你抓住视图时,你不会重复逻辑。 ... 因此,在您的情况下,您可能只在客户端使用MVC,而您需要一个控制器,因为这就是所有神奇之处。

我在阅读客户机-服务器模式的详细信息时想到了这种模式。当您希望执行单元测试时,最好将VM(ViewModel)视为控制器

按照您的模式,一个经典的客户机/服务器模式、控制器、模型和视图在您称为Data_receiver、Data_decoder和Data_core的服务器代码中活动。在“客户机”中,您又有了一个控制器和视图

将从COM接收和解码信号和数据的控制器从服务器代码中分离出来是很有用的。COM是一个模型,控制器在往返数据库的过程中传递和接收数据。COM是一个视图,对模型中的原始数据进行编码和格式化

在遵循请勿重复自己(DRY)原则时,您可能会注意到,在重复代码或职责的代码的服务器和客户端部分中都有控制器代码


当您以测试驱动的开发方式驱动您的开发时,将其划分为不同的部分非常有用,这样您就可以附加各种测试

迟做总比不做好我想纠正你对“为什么客户机和服务器之间需要多一层”的误解

如果你看了下面几行,答案非常清楚,MVC是一个三角形的架构模型

视图向模型请求请求,模型向控制器请求,控制器对其进行处理并发送回视图

The Model is the way you structure your data.
The View is the visible representation. (GUI)
The Controller uses the logic to control the view and/or other logic.
问候,,
Pavan.G

在过去,我曾多次问过自己这个问题,最近我一直在阅读关于JSP model 2架构的文章,维基百科条目说明如下

关于J2EE平台中Web层技术的文献经常使用术语“模型1”和“模型2”,但没有解释。这个术语来源于JSP规范的早期草案,它描述了JSP页面的两种基本使用模式。虽然这些术语已从规范文档中消失,但它们仍然是常用的。模型1和模型2只是指(分别)不存在或存在一个控制器servlet,该servlet从客户机层发送请求并选择视图


这基本上意味着MVC模式本身存在变化,因此您可以根据您的项目始终应用MVC或MV模式。然而,一个合适的MVC体系结构确实应该有一个控制器,因为模型和视图不应该直接相互通信。

但是逻辑和可视化表示已经被客户机-服务器体系结构分割开来:服务器拥有数据和逻辑,客户机表示数据。我更新了我的问题(添加了简单的应用程序示例),请以某种方式对其进行评论(其中什么应该是模型,什么应该是视图,什么应该是控制器),我猜
数据核心
就是您的控制器。您创建的
窗口就是视图。MVC架构在多个窗口中发生不同的事情时生效,因为您的数据核心将变得非常复杂。因此,您将尝试创建控制器的小岛,这些小岛只执行其相应视图的逻辑。然后将所有控制器连接到数据核心。我喜欢这个问题