повторно используемые классы условий / выражений - PullRequest
6 голосов
/ 07 мая 2009

Мне в некоторых случаях требовалось несколько классов для представления условий и управления ими (обычно в пользовательском интерфейсе, поэтому пользователь создает запрос, комбинируя различные типы условий, а затем код может преобразовать его, например, в зависимости от базовой системы, к которой следует обращаться Люцен и дБ). Я искал повсеместно повторно используемый набор классов, я уверен, что это нужно использовать во многих существующих местах (все языки выражений для начинающих), но не смог найти ничего легко пригодного для использования. Я сам закончил писать код оба раза, но мне было не по себе от повторного использования чего-то, что, я уверен, существует.

Типичные потребности: - несколько операторов: и или и т. д. - переменное количество операндов - объединение условий для построения выражений - сериализация выражений - разбор / форматирование выражений из / в строки

кто-нибудь нашел что-то подобное?

Ответы [ 4 ]

1 голос
/ 10 мая 2009

Звучит так, как будто вы ищете Функторы (иначе объекты функций). Если это так, этот ТАК вопрос будет актуален, в отношении. выбор: функтор Commons (уже упоминавшийся) является одной альтернативой, но есть и другие.

Все библиотеки функторов поставляются с фреймворком (который довольно прост: унарные, двоичные предикаты, функции отображения для них, объединяются в цепочки) и базовым набором функций, наиболее часто необходимых.

0 голосов
/ 09 мая 2009

Вы можете проверить ANTLR .

0 голосов
/ 10 мая 2009

Взгляните на Apache Commons Functor . Например. UnaryPredicate , UnaryAnd , UnaryOr и т. Д. Встроенные реализации являются сериализуемыми, но я не знаю, как разбирать строки Тем не менее, я думаю, что это очень хорошее начало для того, что вы хотите. Также взгляните на это руководство IBM на основе библиотеки.

0 голосов
/ 07 мая 2009

Похоже, вы ищете что-то вроде Hibernate Criteria API . Недостатком является то, что вы привязаны к базе данных или, что еще хуже, к конкретной реализации персистентной структуры. Кроме того, он не охватывает все ваши требования, поэтому я не думаю, что это хороший выбор ...

...