Je suis en train de développer une API RESTful et je pense qu'il est pratique d'utiliser des DAO pour mes ressources, car même si je prévois d'utiliser uniquement de la mémoire pour les stocker, je ne veux pas fermer la porte à quiconque utilise ma bibliothèque s'il décide d'utiliser une implémentation de base de données pour le DAO.
Ma question est de savoir si le DAO doit être un singleton ou non. Si ce n'est pas le cas, le service aura une instance du DAO et il ressemblerait à peu près à ceci:
@Path("eventscheduler")
public class EventSchedulerService {
private IEventSchedulerDao dao = new EventSchedulerDao();
// in case a different implementation is to be used
public void setEventSchedulerDao(IEventSchedulerDao dao) {
this.dao = dao;
}
@Path("{uniqueName}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("name") String uniqueName) {
return dao.get(uniqueName);
}
@Path("create")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Tournament createTournament(Tournament tournament) {
return dao.create(tournament);
}
}
Alors que si le DAO était un singleton, mais je suppose qu'il n'y aurait pas beaucoup de différence, juste dans la première ligne:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Je devrais encore utiliser une IEventSchedulerDao
instance, mais je suppose que tous les singletons fonctionnent comme ça, non? Pour une raison quelconque, je corrèle toujours les singletons aux méthodes statiques, donc au lieu d'avoir une instance de singleton visible par l'utilisateur getInstance()
, cela serait caché et il / elle utiliserait simplement EventSchedulerDao.get(name)
, etc ... de manière statique. Est-ce une chose ou est-ce juste moi?
Alors, dois-je ou ne dois-je pas avoir des DAO singleton?
Et comme question secondaire, est-ce que mon approche est d'avoir des portes ouvertes pour que l'utilisateur implémente ses propres DAO?