Quindi una situazione in cui mi imbatto ragionevolmente spesso è quella in cui i miei modelli iniziano a:
- Crescere in mostri con tonnellate e tonnellate di metodi
o
- Permetti di passare a loro pezzi di SQL, in modo che siano abbastanza flessibili da non richiedere un milione di metodi diversi
Ad esempio, diciamo che abbiamo un modello "widget". Iniziamo con alcuni metodi di base:
- get ($ id)
- Inserisci ($ record)
- aggiornamento ($ id, $ record)
- delete ($ id)
- getList () // ottiene un elenco di widget
Va tutto bene e dandy, ma poi abbiamo bisogno di alcuni rapporti:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
E poi il reporting inizia a diventare complesso:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ CUSTOMER_ID)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Puoi vedere dove sta crescendo ... alla fine abbiamo tanti requisiti di query specifici che ho bisogno di implementare tonnellate e tonnellate di metodi, o qualche tipo di oggetto "query" che posso passare a un singolo - & gt ; metodo query (query $ query) ...
... o morde semplicemente il proiettile e inizia a fare qualcosa del genere:
- list = MyModel- > query ("start_date > X AND end_date < Y AND in sospeso = 1 AND customer_id = Z")
C'è un certo fascino nell'avere un solo metodo come quello invece di 50 milioni di altri metodi più specifici ... ma a volte sembra "sbagliato" fare una pila di ciò che è fondamentalmente SQL nel controller.
Esiste un modo "giusto" per gestire situazioni come questa? Sembra accettabile riempire query del genere in un metodo generico - > query ()?
Ci sono strategie migliori?