OOP + MVC对会员控制器的建议

时间:2010-04-20 22:30:37

标签: php model-view-controller oop

我正在尝试尽可能地遵循良好的做法,同时我正在学习在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()
    {
    }
}

1 个答案:

答案 0 :(得分:1)

我要做的是避免在一个控制器中推送所有东西,而是相应地分离功能 - 例如,你可以让一个Registration_Controller只处理成员的注册,Authentication_Controller,Profile_Controller等,这样就是更容易看到应用程序的每个部分负责的内容,而不是让一个控制器承担很多责任,这会导致混淆和其他可维护性问题,至少恕我直言,它对我有用。

回到你关于控制面板的具体问题,是的,将它从​​控制器中取出更有意义,特别是如果它不是它的动作,并且正如你所提到的,你可以为所有可重复的一个帮助类显示逻辑。如果某些内容在控制器的上下文中没有意义,请将其取出。

有一些很酷的框架,比如Cake和Zend FW,它们使设计/开发MVC应用程序变得更加容易,并且提供了一组开箱即用的丰富组件。

MVC和Fw并不是强制性的,它们都涉及到范围和你的特殊需求,有时候它们提供很多帮助,大部分时间我都使用它们,但有时会使事情过于复杂。保持简单;)

干杯, 微米。