2010-08-02 6 views
0

J'ai ce code:Quand utiliser un singleton?

class MyController { 
public function newUserAction() 
{ 
    $view = new View('myfrontend'); 
    if($this->request->isPost()) 
    { 
     $form = new MyForm; 
     $posts = $this->request->getPosts(); 
     if($form->isValid($posts)) 
     { 
      //... 
     } 
    } 
    $view->display(); 
} 

}

Donc, chaque fois que le formulaire est pas rempli correctement, le processus recommence et ainsi chaque fois qu'il ya une « nouvelle vue (« myfrontend ») » ect. Mais est-ce une bonne chose? Pour avoir un nouvel objet de vue encore et encore et encore.

N'est-il pas préférable de travailler avec des singletons ici?

+2

Voir http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons pour une discussion de ce modèle – JAL

+1

De plus en plus de gens commencent à appeler singleton un anti-pattern de nos jours, vous devriez vraiment essayez d'éviter de l'utiliser. –

Répondre

11

Jamais. Aussi simple que cela.

Lorsque vous affichez à nouveau un formulaire non valide, il doit être soumis de nouveau. Ce sera une demande entièrement nouvelle. L'application passera par le bootstrap complet et l'expédition. Un singleton n'aiderait pas ici, car Singletons en PHP ne vivra que pour la requête. En outre, Singletons are much more difficult to test. Je n'ai pas encore trouvé une UseCase où un Singleton ne peut pas être évité en utilisant Dependency Injection. Même Erich Gamma, l'un des inventeurs de motif Singleton, des doutes ce modèle aujourd'hui:

"I'm in favor of dropping Singleton. Its use is almost always a design smell"

Vous êtes mieux loti éviter singletons.

0

Si un objet n'a pas vraiment besoin d'être instancié plus d'une fois, pensez plutôt à déclarer une classe avec des méthodes statiques.