我正在尝试尽可能地遵循良好的做法,同时我正在学习在MVC结构中使用OOP,所以我向你们提出一些建议,这些建议在这里困扰我一点。
我正在写一个网站,我会有很多不同的表格供会员填写(主要是关于他们自己的数据),所以我决定设立一个会员控制器,其中所有与会员有关的表格都是表示为个别方法。这包括登录/注销方法,以及编辑配置文件数据等。除了这些方法,我还有一个方法来生成成员的控制面板小部件,这是成员登录时网站上每个页面上的常量唯一的一点是,这个控制器中的所有其他方法都具有相同的依赖关系和表单模板,所以在构造函数中生成所有这些很好,但是由于control_panel方法没有相同的依赖关系等,我不能为此目的使用构造函数,而是我必须重新声明每个方法中的依赖项和相同的模板片段。这显然不是理想的,也不遵循DRY原则,但我想知道我应该用control_panel方法做什么,因为它与成员有关,这就是为什么我把它放在那个控制器中的原因。
我在这里过分复杂了,将control_panel方法移动到一个简单的帮助类中是否有意义?
以下是控制器的基本方法:
class Member_Controller extends Website_Controller {
public function __construct()
{
parent::__construct();
if (request::is_ajax())
{
$this->auto_render = FALSE; // disable auto render
}
}
public static function control_panel()
{
//load control panel view
$panel = new View('user/control_panel');
return $panel;
}
public function login()
{
}
public function register()
{
}
public function profile()
{
}
public function household()
{
}
public function edit_profile()
{
}
public function logout()
{
}
}
答案 0 :(得分:1)
我要做的是避免在一个控制器中推送所有东西,而是相应地分离功能 - 例如,你可以让一个Registration_Controller只处理成员的注册,Authentication_Controller,Profile_Controller等,这样就是更容易看到应用程序的每个部分负责的内容,而不是让一个控制器承担很多责任,这会导致混淆和其他可维护性问题,至少恕我直言,它对我有用。
回到你关于控制面板的具体问题,是的,将它从控制器中取出更有意义,特别是如果它不是它的动作,并且正如你所提到的,你可以为所有可重复的一个帮助类显示逻辑。如果某些内容在控制器的上下文中没有意义,请将其取出。
有一些很酷的框架,比如Cake和Zend FW,它们使设计/开发MVC应用程序变得更加容易,并且提供了一组开箱即用的丰富组件。
MVC和Fw并不是强制性的,它们都涉及到范围和你的特殊需求,有时候它们提供很多帮助,大部分时间我都使用它们,但有时会使事情过于复杂。保持简单;)
干杯, 微米。