Model view controller MVC,控制器-用例

Model view controller MVC,控制器-用例,model-view-controller,controller,use-case,Model View Controller,Controller,Use Case,我已经了解到,您应该在MVC-OOD中设置controller类作为用例,从上到下只使用一个运行MVC类的方法 在一个控制器中使用不同的方法可以获得更多的控制和更好的概述吗 假设您想要运行一个显示登录表单的控制器(从视图中获取html等)。如果用户未登录,同一控制器还将显示一个注销按钮。 这可以通过控制器中的一种方法实现,但使用两种方法似乎更好。一个方法可以在需要登录表单时调用,另一个方法可以在需要注销按钮时调用。 (只是一个例子) 那么,专业人士怎么说呢。每个控制器应该只包含一个“用例”方法,

我已经了解到,您应该在MVC-OOD中设置controller类作为用例,从上到下只使用一个运行MVC类的方法

在一个控制器中使用不同的方法可以获得更多的控制和更好的概述吗

假设您想要运行一个显示登录表单的控制器(从视图中获取html等)。如果用户未登录,同一控制器还将显示一个注销按钮。 这可以通过控制器中的一种方法实现,但使用两种方法似乎更好。一个方法可以在需要登录表单时调用,另一个方法可以在需要注销按钮时调用。 (只是一个例子)

那么,专业人士怎么说呢。每个控制器应该只包含一个“用例”方法,还是可以包含几个

TL;DR——您误解了MVC设计模式,并且做得不对

控制器不负责呈现接口,也不负责表示逻辑。控制器不显示任何内容。相反,每个控制器的方法处理不同用户的请求。它从所述请求中提取数据并将其传递给模型层和相关视图

关于显示内容和方式的决定属于视图的权限。视图包含MVC模式中的表示逻辑。在web应用程序的上下文中,视图创建响应。它们可以从多个模板组成一个HTTP头,也可以只发送一个HTTP头

控制器可以通过将请求的某些特定值传递给相关视图来向该视图发送信号,但视图中的大多数决策都基于视图从模型层中的不同服务请求的信息


控制器的方法基于用户可以发送的请求类型。例如,在身份验证表单中,它可能是:
GET/login
和/或
POST/login
记住MVC的两件事很重要,第一,它是面向对象的体系结构,第二,它应该用于分离关注点

关注点分离与抽象有关,它帮助我们理解手头的代码部分。模型和视图都是相关对象的集合/域。每个对象都是完全完整的,并与其域相关

您将在视图中找到具有按钮、图像、文本输入等类型的对象,并在模型中找到与业务相关的对象(用户、帐户、配置文件等)

模型中的对象集合往往没有多大作用,它们需要逻辑将对象连接在一起。(或者简单地将简单的单个对象请求委托给正确的对象)


控制器向您的模型提供接口,并包含与模型相关的业务逻辑以及模型对象之间的交互。您的模型将有一个控制器,控制器将有多个方法与您的用例相匹配。

我知道它的作用。控制器显示表单,从视图中获取表单等等,这不是问题@user1121487“答案”在最后一段。这篇文章其余部分的重点是你不明白控制器应该做什么。我不知道你们是从哪里学到MVC设计模式的,但这都是错误的。你们可以用多种方式来实现MVC。我是从大学的编程老师那里学到的。控制器从视图收集数据,从视图到模型,然后返回并返回到控制器实例化的位置。我没有在控制器中使用很多if语句,而是考虑使用多个方法。这就是问题所在。当您将MVC模式应用于web时,您是否意识到没有可收集的视图?控制器不从中收集任何内容。控制器工作不需要视图。它只需要用户的输入。控制器管理请求并更改模型层的状态,视图通过将从控制器接收到的信息与从模型层请求的数据相结合来生成响应。控制器不负责将数据从模型层发送到视图,也不负责创建响应!!必须从视图中收集GET、POST和COOKIE数据。从模型中收集的会话、数据库、文件等。我的老师就是这么说的。例如,如果在控制器或模型中使用GET,则会失败。模型和视图也可以通信,但控制器设计为一个用例:username=view.GetUsername();model.CheckUsername(用户名);视图可以简单地检查用户模型的状态,并决定是否显示“注销”按钮。。这不是面向对象的,但您可能更普遍地寻找基于角色的访问控制