谁负责下一个视图?

时间:2010-09-13 12:56:52

标签: model-view-controller design-patterns language-agnostic

在一个典型的MVC架构中,逻辑在哪里,它决定下一个要显示的视图?

假设某种应用程序具有多个视图(窗口),这些视图在不同时间可能会或可能不会显示,具体取决于用户操作。例如,有时应用程序可能需要用户填写带有其他详细信息的表单,有时可能不需要。控制器有责任要求特定视图变得可见吗?

我在想这个错吗?也许控制器确定哪个其他控制器应该采取控制,并且视图只是根据哪个控制器处于活动状态而更新?

我很困惑。

3 个答案:

答案 0 :(得分:3)

控制器是MVC模式中的老大。它负责授权,同时做最小的工作;)。

一个请求进来,老板看着它,并且认为“Hrm ......这里涉及很多工作。我需要从我的数据库中获取一些数据。幸运的是我有下属!嘿模型,来这里我需要你离开并从DAL获得所有信息。“

将模型视为开发人员。所有真正的努力工作,他的手都很脏,没有模型,整个系统都会崩溃。它熄灭并完成所有业务和域逻辑。然后,它会回到老板那里,并完成所有艰苦的工作。 “你去gov”。

然后老板需要将数据返回给用户。再一次 - 为他做太多工作。所以他得到了一个愚蠢的初级开发者,也就是这样做的观点。 (并非所有的三年级学生都很愚蠢,但它适用于这个例子!)。这个观点一无所知。它并不关心数据是如何形成的,只是它存在并且有效。老板可能会对数据进行一些小的改动,因为我们不希望视图有更多的责任而不是它需要,然后视图就会关闭并显示数据。根据工作量,老板可以为工作招募多个视图。

控制器基本上控制MVC模式中的所有流量。它决定要调用的模型,要渲染的视图以及模型中要传递给视图的哪些数据(ViewModels)。

您可以从控制器调用其他控制器。例如,如果您的主页上有搜索框,当用户点击搜索时,它可以调用搜索控制器上的索引功能。在我上面的比喻中,它类似于一个部门将工作转移到另一个部门。然后整个过程再次开始,老板招募当前请求所需的工作人员。

答案 1 :(得分:0)

控制器。控制器视图不是一对一的关系。控制器可以有很多视图(想想向导类型的情况)。如果这超出您的控制范围,控制器的视图实际上可以是另一个控制器,该控制器负责您的多个视图。

答案 2 :(得分:0)

您正在寻找的是应用程序工作流管理器或应用程序控制器。

http://martinfowler.com/eaaCatalog/applicationController.html

您的控制器应向应用控制器询问下一步操作。这避免了导航中的硬编码,并允许多种情况。

比如说,您有一个联系人列表,然后点击创建按钮,创建一个新联系人。保存成功完成后,创建表单应该消失,您应该再次看到联系人列表。

但是,假设您正在创建联系人作为报价的一部分。创建联系人后,您不想返回联系人列表,又想返回订单。

您可以使用switch语句来确定下一步要做什么,或者使用状态机,或者类似的东西:

Spring Web Flow http://www.springsource.org/spring-web-flow

Windows Workflow Foundation http://msdn.microsoft.com/en-us/netframework/aa663328