2

J'essaie de trouver la meilleure façon d'avoir un modèle de spécification en PHP où les spécifications pourraient (facultativement) être transformées en PHP. Je suis en train d'explorer de nouvelles directions et je suis en train de tester leur efficacité. Le code et les idées sont encore très flous dans mon esprit.Modèle de spécification PHP qui permet la transformation en sql

interfaces minimales seraient comme celles-ci:

interface IRepository { 
    public function get(ISpecification $specification); 
} 

interface ISpecification { 
    public function isSatisfiedBy($candidate); 
} 

Si le dépôt se cache une base de données sql la spécification devrait transformer sql. L'ajout d'une méthode -> toSQL() semble ad hoc. Une classe qui traduit les spécifications est également une option, mais il semble que beaucoup de frais généraux pour finalement générer le sql.

Des idées appréciées.

Répondre

1

Je cite POEAA (pg.324):

Sous les couvertures, Repository combine Metadata Mapping (329) avec un Query Object (316) pour générer automatiquement le code SQL à partir des critères. Si les critères savent comment s'ajouter à une requête, l'objet de requête (316) sait comment incorporer des objets de critère, ou Metadata Mapping (306) contrôle lui-même l'interaction est un détail d'implémentation.

Les critères dans cette description sont bien sûr votre Specification pattern. Je dirais que votre approche suggérée pour utiliser une méthode toSQL sur les objets de critères est correcte lorsque l'application est relativement petite. Comme vous l'avez déjà dit, il est plus difficile d'emprunter les autres routes, mais cela offre également plus de souplesse et de découplage. En fin de compte, vous seul pouvez décider.