Question

J'ai eu besoin à plusieurs reprises de certaines classes pour représenter et manipuler des conditions (généralement dans une interface utilisateur afin que l'utilisateur construise une requête en combinant différents types de conditions. Le code peut ensuite transformer ce code en fonction du système sous-jacent à interroger, par exemple lucene et une db). J'ai cherché partout un ensemble de classes réutilisables, je suis sûr que cela doit être utilisé dans de nombreux endroits existants (tous les langages d'expression pour commencer), mais je n'ai rien trouvé qui soit facilement utilisable. J'ai fini par coder les deux fois moi-même, mais je me sentais mal de ne pas réutiliser quelque chose dont je suis sûr qu'il existe.

Les besoins typiques sont:  - plusieurs opérateurs: et ou etc  - nombre variable d'opérandes  - combiner des conditions pour construire des expressions  - sérialisation des expressions  - analyse / mise en forme des expressions de / à chaînes

quelqu'un a-t-il trouvé quelque chose comme ça?

Était-ce utile?

La solution

Consultez le Apache Commons Functor . Par exemple. UnaryPredicate , UnaryAnd , UnaryOr , etc. Les implémentations -in sont sérialisables, mais je ne connais pas l'analyse syntaxique à partir de chaînes. Néanmoins, je pense que c'est un très bon début pour ce que vous voulez. Consultez également ce didacticiel IBM basé sur le bibliothèque.

Autres conseils

Il semble que vous cherchiez peut-être des des foncteurs (ou objets de fonction). Dans l'affirmative, cette question SO serait pertinente, wrt. choix: le foncteur Commons (déjà mentionné) est une alternative mais il en existe d’autres aussi.

Toutes les bibliothèques de foncteurs sont livrées avec le framework (ce qui est assez simple: prédicats unaires, binaires, fonctionnalité de mappage pour celles-ci, combinant par chaînage) et l'ensemble de base des fonctions le plus souvent nécessaires.

On dirait que vous recherchez quelque chose comme le Hibernate API de critères . L'inconvénient est que vous êtes lié à une base de données ou, pire encore, à une implémentation spécifique du framework de persistance. En outre, cela ne couvre pas tous vos besoins, donc je ne pense pas que ce soit un bon choix alors ...

Vous pouvez consulter ANTLR .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top