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