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