2009-05-07 5 views
6

Ich habe in einigen Gelegenheiten einige Klassen benötigt, um Bedingungen zu repräsentieren und zu manipulieren (normalerweise in einer UI, so dass der Benutzer eine Abfrage durch Kombinieren verschiedener Bedingungstypen erstellt und dann den Code abhängig vom zugrunde liegenden System transformieren kann abgefragt werden, zum Beispiel Lucene und eine db). Ich habe überall nach wiederverwendbaren Klassen gesucht, ich bin mir sicher, dass dies an vielen existierenden Orten (allen Ausdruckssprachen für Anfänger) verwendet werden muss, aber nichts leicht benutzbares finden kann. Ich habe beide Male selbst gecodiert, fühlte mich aber schlecht darin, etwas nicht wieder zu verwenden, von dem ich sicher bin, dass es existiert.wiederverwendbare Bedingung/Ausdruck Klassen

Typische Anforderungen sind: - mehrere Operatoren: und oder etc - variable Anzahl von Operanden - Bedingungen kombiniert Ausdrücke zu bauen - Serialisierung von Ausdrücken - von/nach Strings

hat Parsing/Formatierung von Ausdrücken hat jemand so etwas gefunden?

+0

das ist eine sehr interessante Frage – dfa

+0

ok ja, Functors scheint wie, was ich brauchte. Ich sehe, ich kann nur eine Antwort als die akzeptierte geben. Ich weiß nicht, was der Brauch ist, den ersten oder den vollständigeren, aber den späteren anzunehmen. Vielen Dank! – Persimmonium

Antwort

0

Werfen Sie einen Blick auf . Z.B. UnaryPredicate, UnaryAnd, UnaryOr usw. Die eingebauten Implementierungen sind serialisierbar, aber ich weiß nichts über das Parsen von Strings. Dennoch, ich denke, es ist ein sehr guter Anfang in Richtung was Sie wollen. Werfen Sie auch einen Blick auf this IBM tutorial basierend auf der Bibliothek.

0

Das klingt, als ob Sie etwas wie die Hibernate Criteria API suchen. Der Nachteil ist, dass Sie an eine Datenbank gebunden sind oder, noch schlimmer, an eine bestimmte Persistenz-Framework-Implementierung. Auch es deckt nicht alle von Ihnen Anforderungen, so glaube ich nicht, dass dies eine gute Wahl ist dann ...

+0

Eigentlich ist eines der Dinge, die ich diese Bedingungen/Ausdrücke zu transformieren, eine SQL-Abfrage über Hibernate-Kriterien API (die andere ist eine Lucene-Abfrage, und es könnte mehr sein). Aber ich dachte an etwas Neutraleres, und es würde eine gewisse Fähigkeit erfordern, für jeden Fall (Subklassenbildung oder was auch immer ich nicht darüber nachgedacht habe) anzupassen. – Persimmonium

0

Sie möchten vielleicht ANTLR auschecken.

+0

ist das nicht zum Erstellen von Compilern und so ?? Was ich suchte, ist etwas viel einfacher. – Persimmonium

1

Es klingt, als ob Sie nach Functors (aka Funktionsobjekte) suchen könnten. Wenn ja, wäre dies SO question relevant, wrt. Auswahl: Commons Funktor (bereits erwähnt) ist eine Alternative, aber es gibt auch andere.

Alle Funktor-Bibliotheken sind mit dem Framework (das ziemlich einfach ist; unäre, binäre Prädikate, Mapping-Funktionalität für diese, kombiniert durch Verkettung) und grundlegenden Funktionen am häufigsten benötigt.