Я создаю собственный класс запросов и не уверен, какой самый элегантный способ его кодирования.
Цели:
В настоящее время я могу думать о двух альтернативах.
Result r = new Query().is("tall").capableOf("basketball").name("michael").build();
Методы is()
, enableOf()
и name()
возвращают ссылку на ] Запросить
объект. build()
вернет объект Result
.
Result r = new Query(is("tall"), capableOf("basketball"), name("michael"));
Методы is()
, enableOf()
и name()
являются статическими импортами и возвращают Условие
объектов. Конструктор запроса принимает произвольное количество условий и возвращает результат.
Более сложные запросы, такие как следующие, сложно сформулировать:
высокий баскетболист по имени [майкл ИЛИ деннис]
СОЮЗ
серебряная ложка, изогнутая и блестящая
Шаблон Builder:
Result r = new Query().is("tall").capableOf("basketball").or(new Query().name("michael"), new Query().name("dennis")).
union(
new Query().color("silver").a("spoon").is("bent").is("shiny")
).
build();
Это трудно писать и читать. Кроме того, мне не нравится многократное использование new
.
Статический импорт:
Result r = new Query(is("tall"), capableOf("basketball"), or(name("michael"), name("dennis"))).
union(color("silver"), a("spoon"), is("bent"), is("shiny"));
Мне кажется, лучше, но мне не очень нравится использование статического импорта. Они сложны с точки зрения интеграции с ide, автодополнения и документации.
Я ищу эффективное решение, поэтому открыт для любых предложений. Я не ограничиваюсь двумя альтернативами, которые я представил, если есть другие возможности, я был бы рад, если бы вы сказали мне. Пожалуйста, сообщите мне, если вам нужна дополнительная информация.