Donc, une situation que je rencontre assez souvent est celle où mes modèles commencent à:
- Devenez des monstres avec des tonnes et des tonnes de méthodes
OU
- Vous permettre de leur passer des morceaux de SQL, afin qu'ils soient suffisamment flexibles pour ne pas nécessiter un million de méthodes différentes
Par exemple, disons que nous avons un modèle de "widget". Nous commençons par quelques méthodes de base:
- get ($ id)
- insérer ($ record)
- mise à jour ($ id, $ record)
- supprimer ($ id)
- getList () // récupère une liste de Widgets
C'est très bien et dandy, mais alors nous avons besoin de quelques rapports:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
Et puis le reporting commence à devenir complexe:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Vous pouvez voir où cela se développe ... finalement, nous avons tellement d'exigences de requête spécifiques que j'ai besoin d'implémenter des tonnes et des tonnes de méthodes, ou une sorte d'objet "requête" que je peux transmettre à une seule -> requête (requête $ query), méthode ...
... ou mordez simplement la balle et commencez à faire quelque chose comme ceci:
- list = MyModel-> query ("start_date> X AND end_date <Y AND en attente = 1 AND customer_id = Z")
Il y a un certain attrait à avoir une seule méthode comme celle-ci au lieu de 50 millions d'autres méthodes plus spécifiques ... mais il semble parfois "mal" de bourrer une pile de ce qui est fondamentalement SQL dans le contrôleur.
Existe-t-il une «bonne» façon de gérer des situations comme celle-ci? Semble-t-il acceptable de bourrer des requêtes comme celle-ci dans une méthode générique -> query ()?
Y a-t-il de meilleures stratégies?