Делаю простое web приложение на сервлетах.
Имеются две таблицы
create table users
(
id SERIAL PRIMARY KEY,
username char(20) UNIQUE NOT NULL,
email char(100) UNIQUE NOT NULL,
password char NOT NULL
);
create table todo
(
uuid char(36) PRIMARY KEY,
title char(100),
user_id int REFERENCES users (id),
creation_date date,
done bool default FALSE
);
Планировал реализовать выборку нужных данных через паттерн DAO.
public interface Dao<K, T> {
T create(T entity);
List<T> getAll();
Optional<T> getByPK(K key);
boolean update(T entity);
boolean delete(K key);
}
Данный интерфейс реализован в TodoDao и UserDao.
Однако при реализации возникают вопросы:
1. Что делать, если все методы из интерфейса Dao для User не нужны(Обновлять и удалять данные о пользователе не планирую), все равно писать их реализацию?
2. Помимо тех методов что есть в интерфейсе Dao, для Todo будет нужен метод GetAllByUser, получается его отдельно реализовывать в классе TodoDao?
3. Из 1 и 2 вопроса вытекают итоговый вопрос: как правильно поступить с интерфейсами Dao? Один интерфейс для всех или отдельные интерфейсы для Todo и User, в которых будут только нужные методы?
В случае если делать отдельный интерфейс для каждого класса, в дальнейшем можно будет без проблем сделать реализацию выборки через не через JDBC а через что-либо другое(Это как аргумент в пользу нескольких интерфейсов), плюс не нужно писать реализацию ненужных методов. Однако наличие нескольких интерфейсов настораживает, будто бы правильнее сделать один общий.
P.S прошу дать однозначный обоснованный ответ. Т-как тяжело понять на каком решении остановиться.