Sto sviluppando un'API RESTful e penso che sia conveniente usare DAO per le mie risorse perché, anche se ho intenzione di utilizzare solo la memoria per archiviarle, non voglio chiudere una porta a chiunque usi la mia libreria se ha deciso di utilizzare un'implementazione del database per il DAO.
La mia domanda è se il DAO dovrebbe essere un singleton o no. In caso contrario, il servizio avrà un'istanza del DAO e avrà un aspetto approssimativo come questo:
@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);
}
}
Sebbene il DAO fosse un singleton, ma immagino che non ci sarebbe molta differenza, solo nella prima riga:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Dovrei comunque usare un'istanza di IEventSchedulerDao
, ma immagino che tutti i singleton funzionino correttamente? Per qualche ragione collego sempre i singleton ai metodi statici, quindi invece di avere un'istanza singleton visibile all'utente con getInstance()
, questo sarebbe nascosto e lui / lei userebbe solo EventSchedulerDao.get(name)
, ecc ... in modo statico . È una cosa o sono solo io?
Quindi, dovrei o non dovrei avere DAO singleton?
E come una domanda a parte, va bene il mio approccio per avere delle porte aperte affinché l'utente possa implementare i propri DAO?