Существует ли шаблон проектирования для реализации функции параметрического поиска без использования SQL в Java? - PullRequest
2 голосов
/ 12 сентября 2009

Я не совсем уверен, что лучший подход для разработки того, что я бы назвал «параметрическим» механизмом поиска или правил. У меня есть объект Java, который имеет несколько полей. Я выполню java-объект для нескольких запросов, чтобы проверить, соответствует ли он определенным критериям.

Примером, о котором я могу подумать, является функция поиска ошибок в bugzilla. В пользовательском интерфейсе вы выбираете такие вещи, как статус, разрешение, серьезность. Затем нажмите «Go», и он возвращает ошибки, соответствующие этому критерию. Я полагаю, что это реализовано путем создания запроса SQL из полей, выбранных в пользовательском интерфейсе.

В моем случае объект, который содержит значения, отсутствует в базе данных , так что это не очевидный ответ. Мой объект также довольно сложен и потребует добавления нескольких таблиц ... и создание таблиц базы данных кажется довольно хакерским, чтобы затем использовать механизм запросов в базе данных. Кроме того, в моем приложении пользователь в основном создает эти сопоставления, и они должны быть сохранены в базе данных. Таким образом, в этом случае вы бы в конечном итоге сохранили необработанную строку SQL-запроса в базе данных, что звучало как серьезная защита, нет, нет для меня. (Но я не специалист по базам данных, так что, возможно, именно так все и делается).

На данный момент, я действительно ищу какое-то руководство. Я надеюсь, что есть какой-то шаблон дизайна для того, чего я пытаюсь достичь. Я пробовал гуглить разные вещи, такие как «шаблон проектирования параметрического поиска» и «механизмы правил», и не нашел ничего подходящего. LINQ будет заниматься этим? Я посмотрел на это кратко, и казалось, что это будет слишком много.

Заранее спасибо.

Редактировать 1:
Вот некоторые дополнительные детали, которые, я надеюсь, прояснят комментарии до сих пор. Я хочу позволить пользователю создавать некоторые правила, которые будут похожи, если объект foo.getTempera () равен> = 30 и foo.getTypeOfMsg () == Alert Затем найдите объект настроек «Оповещение». Если foo.getTypeOfMsg () == "Test", тогда получите объект "Test". Правила управляются пользователем, и поэтому существуют бесконечные возможности. Объект foo извлекается веб-сервисом, и мне не нужно хранить его в базе данных.

Ответы [ 2 ]

2 голосов
/ 12 сентября 2009

Если вы не используете БД для хранения своего объекта, все остальное остается таким же, кроме части «Сгенерировать SQL-запрос». То, на что вы должны обратить внимание, это шаблон спецификации . Ваши объекты спецификации в основном имеют единственный метод IsSatisfiedBy, который принимает объект, чтобы проверить, соответствует ли он спецификации. Добавление какого-либо параметра в спецификацию на основе пользовательского ввода выглядит довольно тривиальным упражнением и звучит так, как будто оно будет работать в вашем случае.

Не уверен, что я понимаю часть о «отображениях», но поскольку вы не генерируете необработанный SQL-запрос, просто убедитесь, что ваши объекты спецификации сериализуемы и сохраните его так, как вы хотите.

LINQ может сделать это так же, как обычный C # или Java.

0 голосов
/ 12 сентября 2009

Вы пытаетесь создать решение, управляемое данными, которое может быть произвольно изменено пользователем или кем-то еще, или вы ищете что-то внутреннее.

Решение, управляемое пользователем, имеет бесконечные возможности, которые не известны во время сборки, но для этого требуется некоторый пользовательский интерфейс. Вы должны привязать решение к пользовательскому интерфейсу (например, показать таблицу и позволить им щелкнуть, чтобы отсортировать по заданной строке / строкам и, возможно, позволить им ввести «Критерии фильтрации» для каждой строки), поэтому я не уверен, какое преимущество имеет ваш поиск обеспечит ..

Решение с внутренним управлением имеет фиксированное число возможностей, которые все известны во время сборки. Вы можете легко написать каждую из них - может быть, не так легко, как сделать это так, как вы описываете, но не намного сложнее, поскольку существует ограниченное количество решений, которые вы должны реализовать.

...