Обобщённый метод DAO
Generic Dao существенно облегчает жизнь, но всё время задаюсь вопросом: писать кучу методов для конкретных DAO или один универсальный? Как должен выглядеть универсальный метод?
List<E> getList(???);
Что передавать в качестве параметров? Метод должен делать поиск по некоему фильтру, сортировать и учитывать страницу (pagination).
Поделитесь опытом и соображениями.
Резюме.
Чем больше я думаю на эту тему, тем мне всё больше кажется, что метод должен выглядеть примерно так:
List<E> getList(Specification spec, Orderer order, Pager pager)
Ну или
List<E> getList(SelectionRule rule)
Где SelectionRule содержит в себе объект спецификацию, объект, отвечающий за сортировку и объект указывающий какая страница нужна.
Нужно определить интерфейс билдеров, которые умеют переводить эти объекты в нативные запросы конкретного хранилища (DB, XML и т.д.). Таким образом полностью скроется хранилище от Dao (или Repository если угодно).
Например, в avtodao Dao жёстко привязано к DB хранилищу. Или я не прав?
List<E> getList(???);
Что передавать в качестве параметров? Метод должен делать поиск по некоему фильтру, сортировать и учитывать страницу (pagination).
Поделитесь опытом и соображениями.
Резюме.
Чем больше я думаю на эту тему, тем мне всё больше кажется, что метод должен выглядеть примерно так:
List<E> getList(Specification spec, Orderer order, Pager pager)
Ну или
List<E> getList(SelectionRule rule)
Где SelectionRule содержит в себе объект спецификацию, объект, отвечающий за сортировку и объект указывающий какая страница нужна.
Нужно определить интерфейс билдеров, которые умеют переводить эти объекты в нативные запросы конкретного хранилища (DB, XML и т.д.). Таким образом полностью скроется хранилище от Dao (или Repository если угодно).
Например, в avtodao Dao жёстко привязано к DB хранилищу. Или я не прав?
