2010-04-20 8 views
0

J'essaie de suivre les bonnes pratiques autant que possible pendant que j'apprends en utilisant OOP dans une structure MVC, donc je me tourne vers vous les gars pour un peu de conseil sur quelque chose qui est me dérange un peu ici. Je suis en train d'écrire un site où j'aurai un certain nombre de formulaires à remplir par les membres (principalement des données sur eux-mêmes), j'ai donc décidé de mettre en place un contrôleur Membre où tous les formulaires relatifs au membre sont représentés comme des méthodes individuelles. Cela inclut les méthodes de connexion/déconnexion, ainsi que l'édition des données de profil, etc. En plus de ces méthodes, j'ai aussi une méthode pour générer le widget du panneau de contrôle du membre, qui est une constante sur chaque page du site. La seule chose à faire est que toutes les autres méthodes de ce contrôleur ont toutes les mêmes dépendances et modèles de formulaires, donc ce serait génial de générer tout cela dans le constructeur, mais comme la méthode control_panel n'a pas les mêmes dépendances, etc. Je ne peux pas utiliser le constructeur à cette fin, et je dois à la place redéclarer les dépendances et les mêmes extraits de modèles dans chaque méthode. Ceci n'est évidemment pas idéal et ne suit pas le principe DRY, mais je me demande ce que je devrais faire avec la méthode control_panel, car elle est liée au membre et c'est pourquoi je l'ai mise dans ce contrôleur en premier lieu. Suis-je trop compliquer les choses ici et est-ce qu'il est logique de simplement déplacer la méthode control_panel dans une simple classe d'aide?OOP + conseil MVC sur le contrôleur de membre

Voici les méthodes de base du contrôleur:

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() 
    { 
    } 
} 

Répondre

1

Ce que je ferais, est d'éviter bousculant tout dans un seul contrôleur, et à la place une fonctionnalité séparée en conséquence - par exemple, vous pourriez avoir un Registration_Controller pour traiter uniquement avec l'enregistrement des membres, Authentication_Controller, Profile_Controller, etc., il est plus facile de visualiser ce dont chaque partie de votre application est responsable, au lieu d'avoir un seul contrôleur avec beaucoup de responsabilités, ce qui entraîne des problèmes de confusion et de maintenabilité, au moins à mon humble avis, cela a fonctionné pour moi. Pour en revenir à votre question concrète sur le panneau de commande, oui, il est plus logique de l'enlever du contrôleur, surtout si ce n'est pas une action de celui-ci, et comme vous l'avez mentionné, vous pouvez avoir une classe d'assistance pour tous logique d'affichage reproductible. Si quelque chose n'a pas de sens dans le contexte du contrôleur, retirez-le.

Il existe des frameworks sympas tels que Cake et Zend FW, qui simplifient la conception et le développement d'applications MVC, et qui sont fournis avec un ensemble complet de composants prêts à l'emploi. Mais les MVC et Fw ne sont pas obligatoires, tout dépend de la portée et de vos besoins particuliers, parfois ils sont d'une aide précieuse, la plupart du temps je les utilise, mais parfois des choses trop compliquées. Restez simple;)

Cheers, M.

Questions connexes