2009-05-07 15 views
6

He necesitado en varias ocasiones algunas clases para representar y manipular condiciones (generalmente en una UI para que el usuario cree una consulta combinando diferentes tipos de condiciones y luego el código puede transformar eso dependiendo del sistema subyacente a ser consultado, por ejemplo lucene y a db). Busqué por todas partes un conjunto de clases reutilizables, estoy seguro de que esto debe usarse en muchos lugares existentes (todos los lenguajes de expresión para principiantes) pero no pude encontrar nada fácil de usar. Terminé codificando ambas veces, pero me sentí mal por no reutilizar algo que estoy seguro existe.clases de condición/expresión reutilizables

necesidades típicas son: - varios operadores: yo etc - número variable de operandos - la combinación de condiciones para construir expresiones - serialización de expresiones - análisis sintáctico/formato de expresiones desde/hasta cadenas

ha alguien encontró algo así?

+0

esta es una pregunta muy interesante – dfa

+0

bien sí, Functors parece ser lo que necesitaba. Veo que solo puedo establecer una respuesta como la aceptada. No sé cuál es la costumbre, para aceptar la primera o la más completa, pero más tarde. ¡Gracias! – Persimmonium

Respuesta

0

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

+0

En realidad, una de las cosas a las que transformo estas condiciones/expresiones es una consulta sql a través de la api de criterios de hibernación (la otra es una consulta lucene, y podría haber más). Pero estaba pensando en algo más neutral, y necesitaría cierta habilidad para personalizar en cada caso (subclases o lo que sea que no haya pensado en profundidad). – Persimmonium

0

Es posible que desee comprobar ANTLR.

+0

no se usa para compilar compiladores y tal? Lo que estaba buscando es algo mucho más simple. – Persimmonium

1

Suena como si estuvieras buscando Functors (también conocido como objetos de función). Si es así, este SO question sería relevante, wrt. opciones: el functor de Commons (mencionado anteriormente) es una alternativa, pero también hay otras.

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

Cuestiones relacionadas