MVP:演示者是否应该执行引导任务


MVP: should the Presenter carry out bootstrap tasks?

我正在转换一个定制的PHP网站使用MVP。这对我来说比MVC更可取。另外,在我看来,大多数声称是MVC的教程和框架似乎更像是MVP。

无论如何,我的站点站点有一个引导包含:

  1. 命名空间类的PSR-0自动加载器
  2. 永远不会改变的硬编码配置(全部在关联数组$settings中)
  3. 创建通用对象,如数据库连接、变量清理器、格式化器等
  4. 数据库连接>
  5. 从数据库加载设置(可在CMS中编辑)
  6. <
  7. URL路由/gh>

在MVP中,演示者会从引导中"接管"并执行这些任务吗?

如果我正确理解MVP,演示者应该是一个处理所有用户输入的类,所以这将包括URL路由。对我来说,其他几点更像是引导的责任。这里我唯一关心的是将所有这些对象和设置注入到演示器中。

tl;dr使用一个顶级的AppController来处理所有页面所需的路由和设置,并让演示者处理与特定页面/视图相关的事情。


为一般内容使用顶级控制器

这个GWT MVP教程有一个额外的AppController来处理所有不特定于某个视图/演示器的事情。我觉得这是个好主意。虽然GWT是用于客户端的,但同样的原则也可以用于服务器端。

MVP中的演示器非常特定于某个视图,它应该只与视图和模型(或它们各自的接口)对话,而所有项目都不特定于特定的页面/视图。如果你把这些都放在"演示器"中,那么你就把演示器当成了"Web MVC"中的控制器。

例子

例如,AppController可以根据HTTP参数(即路由)选择正确的演示者,建立DB连接并加载其他常规设置。然后可以将连接对象传递给呈现者,呈现者知道如何实例化正确的视图和模型,并将连接传递给模型。视图和呈现器不应该知道任何关于连接的信息,模型不应该依赖于任何实现,只需要注入接口。

设置

从数据库加载设置(可在CMS中编辑)

这听起来应该属于一个模型。模型知道它需要什么设置,并可以要求它们。如果设置与UI相关,那么演示者或视图应该请求它们。如果它是纯粹的视觉内容,那么它将进入视图,但如果它是"显示逻辑",那么它属于演示者,在MVP视图中应该没有逻辑。