Tak więc często spotykam się z sytuacją, w której moje modele zaczynają:
- Wyhoduj potwory z mnóstwem metod
LUB
- Pozwalają ci przekazywać im fragmenty SQL, dzięki czemu są wystarczająco elastyczne, aby nie wymagały miliona różnych metod
Załóżmy na przykład, że mamy model „widżetu”. Zaczynamy od kilku podstawowych metod:
- get ($ id)
- wstaw ($ record)
- aktualizacja ($ id, $ record)
- usuń ($ id)
- getList () // pobierz listę widżetów
Wszystko w porządku i elegancko, ale potrzebujemy raportów:
- listCreatedBetween ($ data_początkowa, $ data_końcowa)
- listPurchasedBetween ($ data_początkowa, $ data_końcowa)
- listOfPending ()
A potem raportowanie zaczyna się komplikować:
- listPendingCreatedBetween ($ data_początkowa, $ data_końcowa)
- listForCustomer ($ identyfikator_użytkownika)
- listPendingCreatedBetweenForCustomer ($ identyfikator_użytkownika, $ data_początkowa, $ data_końcowa)
Możesz zobaczyć, gdzie to rośnie ... w końcu mamy tak wiele specyficznych wymagań dotyczących zapytań, że albo muszę wdrożyć mnóstwo metod, albo jakiś obiekt „zapytania”, który mogę przekazać do pojedynczego -> zapytania (zapytania $ zapytanie) metoda ...
... lub po prostu ugryź kulę i zacznij robić coś takiego:
- list = MyModel-> zapytanie („data_początkowa> X I data_końcowa <T ORAZ w toku = 1 ORAZ identyfikator_użytkownika = Z”)
Istnieje pewna apelacja, aby mieć tylko jedną taką metodę zamiast 50 milionów innych bardziej szczegółowych metod ... ale czasami wydaje się „niewłaściwe” wrzucanie do kontrolera stosu tego, co w zasadzie jest SQL.
Czy istnieje „właściwy” sposób radzenia sobie z takimi sytuacjami? Czy wydaje się akceptowalne umieszczanie takich zapytań w ogólnej -> query () metodzie?
Czy są lepsze strategie?