MVP:演示者应该执行引导任务吗?

时间:2015-05-24 14:38:13

标签: php model-view-controller mvp

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

无论如何,我的网站站点都有一个包含以下内容的引导程序:

  1. 用于命名空间类的PSR-0自动加载器
  2. 永不改变的硬编码配置(全部在关联数组中$flag = 0; $str = ''; for( $i=0; $i < count( $array ); $i++ ){ if( 0 == $array[$i] ){ $flag = 0; continue; } if( $i > 0 && $session_array[$i] == $session_array[$i-1] ){ $flag = 1; continue; } $str .= (string)$i+$flag . ','; }
  3. 创建通用对象,如数据库连接,变量清理器,格式化程序等
  4. 数据库连接
  5. 从数据库加载设置(可在CMS中编辑)
  6. 网址路由
  7. 在MVP中,Presenter会从引导程序中“接管”并完成上述任务吗?

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

1 个答案:

答案 0 :(得分:1)

tl; dr 使用顶级AppController处理所有页面所需的路由和设置,并将演示者留给与特定页面/视图相关的内容。

使用顶级控制器来处理常规内容

这个GWT MVP tutorial有一个额外的AppController,可以处理特定于某个视图/演示者的所有内容。我觉得这个好主意。虽然GWT适用于客户端,但可以在服务器上使用相同的原则。

MVP中的演示者非常特定于某个视图,它应该只与视图和模型(或它们各自的接口)对话,而所有项目都不是特定于特定页面/视图。如果你把它全部放在“演示者”中,那么你就像“Web MVC”中的控制器一样误用了演示者。

实施例

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

设置

  

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

这听起来应该属于模型。该模型知道它需要什么设置,并可以要求它们。如果设置与UI相关,则演示者或视图应该询问它们。如果它是纯视觉的东西,那么它会进入视图,但如果它是“显示逻辑”,那么它属于演示者,因为在MVP中视图应该没有逻辑。