Padrão de especificação PHP que permite a transformação em SQL
-
22-09-2019 - |
Pergunta
Estou tentando descobrir qual seria a melhor maneira de ter um padrão de especificação no PHP, onde as especificações poderiam (opcionalmente) por transformadas em PHP.
Estou explorando algumas novas direções e testando o quão bem elas funcionariam. Código e idéias ainda não estão muito claros em minha mente.
Interfaces mínimas seriam assim:
interface IRepository {
public function get(ISpecification $specification);
}
interface ISpecification {
public function isSatisfiedBy($candidate);
}
Se o repositório ocultar um banco de dados SQL, a especificação precisaria transformar em SQL. Adicionar um método A -> TOSQL () parece ad hoc. Uma classe que traduz as especificações também é uma opção, mas parece muita sobrecarga finalmente gerar o SQL.
Idéias apreciadas.
Solução
Citando Poeaa (pág.324):
Debaixo das cobertas, Repositório combina Mapeamento de metadados (329) com um Objeto de consulta (316) Para gerar automaticamente o código SQL a partir dos critérios. Se os critérios sabem como se adicionar a uma consulta, o Objeto de consulta (316) sabe como incorporar objetos de critérios, ou o Mapeamento de metadados (306) A própria controla a interação é um detalhe de implementação.
o critério Nestas descrições são obviamente o seu Padrão de especificação. Eu diria que sua abordagem sugerida para usar um toSQL
O método nos objetos de critérios é bom quando o aplicativo é relativamente pequeno. Como você já disse, ir às outras rotas é mais difícil, mas também oferece maior flexibilidade e dissociação. No final, só você pode decidir.