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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top