Quindi una situazione in cui mi imbatto abbastanza spesso è quella in cui i miei modelli iniziano a:
- Cresci in mostri con tonnellate e tonnellate di metodi
O
- Ti consente di passare loro pezzi di SQL, in modo che siano abbastanza flessibili da non richiedere un milione di metodi diversi
Ad esempio, supponiamo di avere un modello "widget". Iniziamo con alcuni metodi di base:
- ottenere ($ id)
- inserire ($ 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)
- listPurchasedB Between ($ start_date, $ end_date)
- listOfPending ()
E poi i rapporti iniziano a diventare complessi:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Puoi vedere dove sta crescendo ... alla fine abbiamo così tanti requisiti di query specifici che ho bisogno di implementare tonnellate e tonnellate di metodi, o una sorta di oggetto "query" che posso passare a una singola -> query (query $ query) metodo ...
... o semplicemente mordi 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 appello ad avere un metodo del genere invece di 50 milioni di altri metodi più specifici ... ma a volte sembra "sbagliato" riempire una pila di ciò che è fondamentalmente SQL nel controller.
Esiste un modo "giusto" per gestire situazioni come questa? Sembra accettabile inserire queste query in un metodo generico -> query ()?
Ci sono strategie migliori?