septembre
2009
Un ami à moi, Padraic Brady définit de manière ludique le syndrôme du « Fat Stupid Ugly Controller« .
En gros : on trouve souvent des codes qui attribuent trop de responsabilités à une contrôleur. Je rappelle qu’un contrôleur ne doit jamais manipuler une base de données, c’est une entorse à MVC qui sépare clairement la couche M (qui d’ailleurs peut utiliser autre chose qu’une base de données), de la couche C.
En formation chez Anaska, nous apprenons à l’éviter et à concevoir, en architecture logicielle, un vrai modèle MVC tel qu’il est défini par le pattern.
Certes certains écarts sont tolérés, mais voyez plutôt ce code mauvais :
class MembreController extends Zend_Controller_Action
{
public function loginAction()
{
$form = new Form_Login();
if ($form->isValid($this->getRequest()->getPost()))
{
$auth = new Zend_Auth_Adapter_DbTable($db, 'membres', 'login', 'pass');
$auth->setIdentity($form->getValue('log'));
$auth->setCredential($form->getValue('pass'));
$res = $auth->authenticate();
if (!$res->isValid()) {
$this->_redirect('/wrong');
}
}
}
}
Ce code va être difficile à tester et à maintenir, car il attribue au contrôleur des rôles que MVC ne lui donne clairement pas : créer un processus d’authentification et le déclencher, utiliser une base de données, créer un formulaire de toute pièce (ce point là est discutable).
Voici qui est mieux, avec un vrai modèle, plein de responsabilités, partageable entre plusieurs applications et testable sans le contrôleur.:
class MembreController extends Zend_Controller_Action
{
public function loginAction()
{
$membre = new Model_Object_Membre();
$form = $membre->getForm('login');
if ($form->isValid($this->getRequest()->getPost())) {
$membre->populateFromForm($form);
$membre->authenticate()->persist();
$this->_redirect('/');
}
}
}
Zend_Db permet de coder un modèle basé sur une base de données, car il est extrêmement souple et intuitif. Les patterns Table Data Gateway et Row Data Gateway peuvent servir de base à toute conception d’un modèle, aussi complexe soit-il.
En plus, Zend_Test_PHPUnit_Db vient de faire son apparition, plus de mauvaises raisons de mal coder
1 Commentaire + Ajouter un commentaire
Commentaires récents
Archives
- novembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
- avril 2007
- mars 2007
- février 2007
Moi qui était content de mon controller d’authentification, j’ai eu tout faux !
Très éclairant pour moi, je suis avide d’autres exemples ! (non, je n’ai pas de sous pour une petite formation chez anaska, même si cela me plairait bien)