Skip to content

Instantly share code, notes, and snippets.

@untalsanders
Created September 9, 2024 22:28
Show Gist options
  • Save untalsanders/a75bb04e44b70d09ec72359175ce1718 to your computer and use it in GitHub Desktop.
Save untalsanders/a75bb04e44b70d09ec72359175ce1718 to your computer and use it in GitHub Desktop.
Patron DAO con Generics

É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 */ }.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment