Condições classes reutilizáveis ??/ expressão
-
08-07-2019 - |
Pergunta
Eu necessário em várias ocasiões algumas classes para representar e manipular condições (normalmente em uma interface do usuário para que o usuário constrói uma consulta através da combinação de diferentes tipos de condição e, em seguida, o código pode transformar que, dependendo do sistema subjacente a ser consultado, por exemplo lucene e um db). Eu procurei todo para um conjunto reutilizável de aulas, eu tenho certeza que isso tem que ser usado em muitos lugares existentes (todas as linguagens de expressão para começar), mas não consegui encontrar nada facilmente utilizável. Acabei de codificação ambas as vezes eu mesmo, mas me senti mal por não reutilizar algo que eu tenho certeza que existe.
necessidades típicas são: - vários operadores: e ou etc - número variável de operandos - combinando condições para expressões de construção - serialização de expressões - análise / formatação de expressões de / para cordas
tem alguém encontrou algo assim?
Solução
Dê uma olhada Apache Commons Functor . Por exemplo. UnaryPredicate , UnaryAnd , UnaryOr , etc. A built implementações -em são Serializable, mas eu não sei sobre análise de cadeias. Ainda assim, eu acho que é um bom começo para o que você quiser. Além disso, dê uma olhada este IBM tutorial baseado no biblioteca.
Outras dicas
soa como você pode estar procurando Functores (aka objetos de função). Se assim for, este SO questão seria relevante, wrt. Escolhas. Commons functor (já mencionado) é uma alternativa, mas existem outros também
Todos os libs functor vêm com a estrutura (que é bastante simples; unário, predicados binários, funcionalidade de mapeamento para aqueles, combinando encadeando). E conjunto básico de funções mais comumente necessários
isso soa como você está procurando algo como o Hibernate API critérios. A desvantagem é que você está amarrado a um banco de dados ou pior ainda uma implementação framework de persistência específica. Também não cobre todos vocês requisitos, então eu não acho que isso é uma boa escolha, em seguida, ...
Você pode querer verificar para fora ANTLR .