Portanto, uma situação em que me deparo razoavelmente é aquela em que meus modelos começam:
- Torne-se monstros com toneladas e toneladas de métodos
OU
- Permite passar partes do SQL para eles, para que sejam flexíveis o suficiente para não exigir um milhão de métodos diferentes
Por exemplo, digamos que temos um modelo "widget". Começamos com alguns métodos básicos:
- get ($ id)
- insert ($ record)
- atualização ($ id, $ record)
- delete ($ id)
- getList () // obtém uma lista de Widgets
Tudo bem e elegante, mas precisamos de alguns relatórios:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
E então os relatórios começam a ficar complexos:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Você pode ver onde isso está crescendo ... eventualmente, temos tantos requisitos de consulta específicos que eu preciso implementar toneladas e toneladas de métodos ou algum tipo de objeto "query" que eu posso passar para uma única -> query (query $ query) método ...
... ou apenas morda a bala e comece a fazer algo assim:
- list = MyModel-> query ("data_de_início> X AND data_de final <Y AND pendente = 1 AND customer_id = Z")
Há um certo apelo para ter apenas um método como esse, em vez de 50 milhões de outros métodos mais específicos ... mas às vezes parece "errado" colocar uma pilha do que é basicamente SQL no controlador.
Existe uma maneira "certa" de lidar com situações como esta? Parece aceitável incluir consultas como essa em um método genérico -> query ()?
Existem melhores estratégias?