应用程序控制器应该做什么?

时间:2020-03-06 14:35:47  来源:igfitidea点击:

我对应用程序控制器应该做什么感到有些困惑?因为我看到MVP模式中也将存在该功能,以决定单击按钮时应显示哪种形式?是否有使用应用程序控制器模式的Windows窗体的良好示例?

MVC(ontroler)和应用程序控制器有所不同。我知道MVC(ontroller),我不确定应用程序控制器的职责是什么,以及它如何适合WinForms应用程序。马丁·福勒(Martin Fowler)也将此称为"应用程序控制器"模式,肯定与MVC(ontroller)不同吗?

解决方案

我个人没有MVP或者Winforms的经验,但是我曾与MVC合作。希望这就是我们要的内容,否则请完全忽略我的回答。

MVC中的C不仅负责选择要呈现给客户端的下一个视图,还负责更多的工作。它保存了应用程序的大多数(最好是所有)业务​​逻辑,包括系统任务的执行(例如记录和执行从模型到模型的数据流的权限的记录和执行)。

自然,其主要任务是服务于其上方的表示层,并将其与下方的模型层分离,同时在它们之间进行中介。我想我们可以将其视为应用程序的大脑。

希望这可以帮助,

尤瓦尔= 8-)

应用程序控制器与MVC中使用的控制器有些不同。

Martin Fowler在应用程序控制器上的页面。

对于MVP WinForms应用程序,我认为这似乎是问题所在。我们可以将"我现在要显示什么形式"的所有逻辑放入Presenter中,但是随着应用程序的增长,我们将在Presenters之间复制很多代码。

假设我们有2个视图,每个视图都有一个"编辑此窗口小部件"按钮,则这两个视图都必须具有获取WidgetEditorPresenter并显示关联视图的逻辑。如果我们有一个ApplicationController,则将该逻辑移到ApplicationController中,现在我们在ApplicationController中的所有演示者中都只具有一个依赖项,可以调用appController.EditWidget(),它将弹出正确的视图。

应用程序控制器是一个超级控制器,它在我们从一个屏幕移动到另一个屏幕时控制整个系统中的应用程序流。

我最近写了一篇关于在CWinforms项目中创建和使用ApplicationController的文章,以直接将工作流和演示者与表单分离。它可能会有所帮助:

使用应用程序控制器解耦工作流和表单

编辑:
目前,Archive.org拥有该文章的可读性更高的副本。