Ésta sería una abstracción de las operaciones CRUD para implementar con el patrón DAO.
public interface DAO<T> {
void create(T entity);
T read(String id); // Ya que uso UUID el id debe ser un String
void update(String id); // Ya que uso UUID el id debe ser un String
void delete(T entity);
}
Otra alternativa sería:
public interface DAO<T, ID> {
<S extends T> S create(S entity);
Optional<T> read(ID id);
<S extends T> S update(ID id, S entity);
void delete(T entity);
}
En el fragmento anterior doy nombres que tratan de seguir la sigla CRUD, pero si se debe ser más específicos y aportar mucho mayor semántica en los métodos.
Además siguiendo la convención de nombres de Spring Data
public interface DAO<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID id);
<S extends T> S update(ID id, S entity);
void delete(T entity);
void deleteById(ID id);
}
Aquí hay que tener en cuenta que estoy haciendo uso de Generics
lo cual no está estipulado en el patrón DAO que deba ser así.
Lo que es más común es encontrar public interface DAO { /* methods */ }
y que cada clase que la implemente public class UserDao implements DAO { /* your code */ }
,
public class RoleDao implements DAO { /* your code */ }
.