我正在转换一个定制的PHP网站以使用MVP。这对我来说比MVC更好。在我看来,大多数声称是MVC的教程和框架似乎都是MVP。
无论如何,我的网站站点都有一个包含以下内容的引导程序:
$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 . ',';
}
)在MVP中,Presenter会从引导程序中“接管”并完成上述任务吗?
如果我正确理解MVP,Presenter应该是一个处理所有用户输入的类,所以这将包括URL路由。对我来说,其他几点似乎更像是引导程序的责任。我唯一关心的是将所有这些对象和设置注入Presenter。
答案 0 :(得分:1)
tl; dr 使用顶级AppController处理所有页面所需的路由和设置,并将演示者留给与特定页面/视图相关的内容。
这个GWT MVP tutorial有一个额外的AppController,可以处理特定于某个视图/演示者的所有内容。我觉得这个好主意。虽然GWT适用于客户端,但可以在服务器上使用相同的原则。
MVP中的演示者非常特定于某个视图,它应该只与视图和模型(或它们各自的接口)对话,而所有项目都不是特定于特定页面/视图。如果你把它全部放在“演示者”中,那么你就像“Web MVC”中的控制器一样误用了演示者。
例如,AppController可以根据HTTP参数(即路由)选择正确的演示者,建立数据库连接并加载其他常规设置。然后可以将连接对象传递给演示者,演示者知道实例化正确的视图和模型,并将连接传递给模型。视图和演示者不应该对连接有任何了解,模型不应该依赖于任何实现,只需注入接口。
从数据库加载设置(可在CMS中编辑)
这听起来应该属于模型。该模型知道它需要什么设置,并可以要求它们。如果设置与UI相关,则演示者或视图应该询问它们。如果它是纯视觉的东西,那么它会进入视图,但如果它是“显示逻辑”,那么它属于演示者,因为在MVP中视图应该没有逻辑。