Вы используете интерфейсы в значительной степени так, как это делает Spring, независимо от того, используете ли вы общие DAO. Он включает веб-уровень как часть представления.
Я не в восторге от твоего сервисного кода. Весь смысл интерфейса персистентности состоит в том, чтобы абстрагировать SQL от клиентов, но вы позволили SELECT просочиться в уровень обслуживания. Неправильно, на мой взгляд.
В том, как вы делаете что-то, мало или ничего нет объектно-ориентированного.
Я предполагаю, что "универсальный дао" означает что-то вроде это .
Я сделал это с помощью Spring и Hibernate. Общий интерфейс DAO выглядел так:
package persistence;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<T, K extends Serializable>
{
List<T> find();
T find(K id);
List<T> find(T example);
K save(T instance);
void update(T instance);
void delete(T instance);
}
Так что, если у меня есть объекты модели User и Book, у меня может быть два DAO, например:
GenericDao<User, Long> userDao = new GenericDaoImpl<User, Long>(User.class);
GenericDao<Book, String> bookDao = new GenericDaoImpl<Book, String>(Book.class);
GenericDaoImpl - это либо упражнение для вас, либо придется подождать, пока я не смогу опубликовать исходный код.