Pregunta

He necesitado en varias ocasiones algunas clases para representar y manipular condiciones (normalmente en una interfaz de usuario para que el usuario construya una consulta combinando diferentes tipos de condiciones y luego el código puede transformar eso dependiendo del sistema subyacente a consultar, por ejemplo lucene y un db). Busqué por todas partes un conjunto reutilizable de clases, estoy seguro de que esto debe usarse en muchos lugares existentes (todos los lenguajes de expresión para empezar) pero no pude encontrar nada fácilmente utilizable. Terminé codificando las dos veces, pero me sentí mal por no reutilizar algo que estoy seguro existe.

Las necesidades típicas son:  - varios operadores: y / o etc.  - número variable de operandos  - combinando condiciones para construir expresiones  - serialización de expresiones  - análisis / formateo de expresiones de / a cadenas

¿Alguien ha encontrado algo así?

¿Fue útil?

Solución

Eche un vistazo a Apache Commons Functor . P.ej. UnaryPredicate , UnaryAnd , UnaryOr , etc. -in implementaciones son serializables, pero no sé sobre el análisis de cadenas. Aún así, creo que es un muy buen comienzo hacia lo que quieres. Además, eche un vistazo a este tutorial de IBM basado en el biblioteca.

Otros consejos

Parece que podría estar buscando Functors (también conocidos como objetos de función). Si es así, esta pregunta SO sería relevante, wrt. opciones: Functor de Commons (ya mencionado) es una alternativa, pero también hay otras.

Todas las bibliotecas de functor vienen con el marco (que es bastante simple; predicados binarios unarios, funcionalidad de mapeo para aquellos, combinando por encadenamiento) y el conjunto básico de funciones más comúnmente necesarias.

Parece que está buscando algo como Hibernate Criterios API . El inconveniente es que está vinculado a una base de datos o, lo que es peor, a una implementación específica del marco de persistencia. Además, no cubre todos sus requisitos, por lo que no creo que esta sea una buena opción entonces ...

Es posible que desee consultar ANTLR .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top