Domanda

In diverse occasioni ho avuto bisogno di alcune classi per rappresentare e manipolare le condizioni (in genere in un'interfaccia utente in modo che l'utente costruisca una query combinando diversi tipi di condizioni e quindi il codice può trasformarlo a seconda del sistema sottostante da interrogare, ad esempio lucene e un db). Ho cercato dappertutto un insieme riutilizzabile di classi, sono sicuro che questo deve essere usato in molti posti esistenti (tutti i linguaggi di espressione per cominciare) ma non sono riuscito a trovare nulla facilmente utilizzabile. Ho finito per programmare entrambe le volte da solo, ma mi sono sentito male per non riutilizzare qualcosa di cui sicuramente sono sicuro.

I bisogni tipici sono:  - più operatori: e o ecc  - numero variabile di operandi  - combinare le condizioni per costruire espressioni  - serializzazione di espressioni  - analisi / formattazione di espressioni da / a stringhe

qualcuno ha trovato qualcosa del genere?

È stato utile?

Soluzione

Dai un'occhiata a Apache Commons Functor . Per esempio. UnaryPredicate , UnaryAnd , UnaryOr , ecc. Il costruito -in implementazioni sono serializzabili, ma non so di analizzare dalle stringhe. Tuttavia, penso che sia un ottimo inizio per quello che vuoi. Inoltre, dai un'occhiata a questo tutorial IBM basato sul biblioteca.

Altri suggerimenti

Sembra che tu stia cercando Functors (aka oggetti funzione). In tal caso, questa SO question sarebbe pertinente, wRT. scelte: Commons functor (già menzionato) è un'alternativa ma ce ne sono anche altre.

Tutte le librerie di funzioni vengono fornite con il framework (che è abbastanza semplice; predicati binari unari, funzionalità di mapping per quelli, combinando per concatenamento) e set di funzioni di base più comunemente necessari.

Sembra che tu stia cercando qualcosa come Hibernate API criteri . Lo svantaggio è che si è collegati a un database o, peggio ancora, a una specifica implementazione del framework di persistenza. Inoltre non copre tutti i requisiti, quindi non credo che questa sia una buona scelta ...

Potresti voler dare un'occhiata a ANTLR .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top