Estoy desarrollando una API RESTful y creo que es conveniente usar DAO para mis recursos porque aunque planeo usar solo memoria para almacenarlos, no quiero cerrar la puerta a quien esté usando mi biblioteca si deciden usar Una implementación de base de datos para el DAO.
Mi pregunta es si el DAO debería ser un singleton o no. Si no es así, el servicio tendrá una instancia del DAO y se vería más o menos así:
@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);
}
}
Si bien el DAO era un singleton, pero supongo que no habría mucha diferencia, solo en la primera línea:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Todavía tendría que usar una IEventSchedulerDao
instancia, pero supongo que todos los singletons funcionan así, ¿verdad? Por alguna razón, siempre correlaciono los singletons con los métodos estáticos, por lo que, en lugar de tener una instancia de singleton visible para el usuario getInstance()
, esto estaría oculto y él / ella simplemente usaría EventSchedulerDao.get(name)
, etc ... de manera estática. ¿Es esto una cosa o solo soy yo?
Entonces, ¿debería o no debería tener DAO singleton?
Y como pregunta adicional, ¿está bien que mi enfoque tenga puertas abiertas para que el usuario implemente sus propios DAO?