2010-07-17 10 views
2

Salut J'ai un problème où je dois effectuer des étapes/actions similaires (qui diffèrent légèrement) sur différents ensembles de données (les données peuvent être légèrement différentes en ce qui concerne sa structure). Il y a quelques étapes que je dois effectuer: connecter, valider, générer des messages d'erreur si nécessaire, modifier la structure des données dans un format défini et afficher les résultats. Je regardais le motif de la méthode du gabarit qui semble très bien convenir - est-ce que cela semble correct ou y aurait-il une meilleure façon d'aborder ce type de problème?Quand utiliser le modèle de méthode modèle

Je vise une conception par laquelle de nouveaux ensembles de données peuvent être facilement ajoutés au système sans perturber quoi que ce soit, et aussi le rapport d'erreur peut être changé etc. sans affecter beaucoup dans le système.

J'utilise php.

Répondre

1

La méthode de stratégie fonctionne bien avec la méthode de modèle.

La méthode de modèle spécifie les exigences de la classe. La méthode de stratégie vous permet d'utiliser des objets pour définir les comportements et de les définir lors de l'exécution à l'aide de l'injection de dépendances.

class CRUDTemplate 
{ 
    protected $updater; 
    protected $creator; 
    protected $deletor; 
    protected $loader; 

    public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader) 
    { 
      $this->updater = $updater; 
      //...snipped... 
    } 

    // sample template function; others are create, delete, update 
    public function load($id) 
    { 
      $this->content = $this->loader->load($id); 
    } 
} 

Alors que le code exemple montre que les fonctions de modèle appelant chacun de la stratégie, plus peut être fait dans une version surchargée spécialisée des fonctions de modèle, telles que la validation de l'entrée, initisation et tel. Et après tout, quelque chose doit appeler les stratégies. Les avantages sont que, pour l'exemple ci-dessus, vous pouvez utiliser différents ensembles de stratégies différentes pour différentes conditions (CRUD peut ne pas être le meilleur exemple ici). Donc, si vous voulez changer la façon dont les données sont sorties, mais conserver comment elles sont sauvegardées/créées/chargées, vous avez juste besoin de changer la stratégie de sortie. Le contraire est que vous devez vous assurer que les stratégies sont pour le bon contexte, car il n'y a pas de vérification de type pour s'assurer que les stratégies que vous passez sont valides (tout fonctionnera tant qu'il est de la classe de base expectd). Ah oui, le CRUDTemplate pourrait dériver d'une classe de base aussi.

Pour les données, en PHP, je trouve que le tableau fonctionne le mieux pour passer des paramètres complexes. Bien sûr, vous devez faire votre validation du tableau