Tworzę API RESTful i myślę, że wygodnie jest używać DAO dla moich zasobów, ponieważ chociaż planuję po prostu używać pamięci do ich przechowywania, nie chcę zamykać drzwi przed kimkolwiek, kto korzysta z mojej biblioteki, jeśli zdecydują się użyć implementacja bazy danych dla DAO.
Moje pytanie brzmi, czy DAO powinno być singlem, czy nie. Jeśli nie, usługa będzie miała instancję DAO i będzie wyglądać mniej więcej tak:
@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);
}
}
Chociaż jeśli DAO byłby singlem, ale myślę, że nie byłoby dużej różnicy, tylko w pierwszym wierszu:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Nadal musiałbym użyć IEventSchedulerDao
instancji, ale chyba wszystkie singletony działają w ten sposób, prawda? Z jakiegoś powodu zawsze koreluję singletony z metodami statycznymi, więc zamiast wyświetlania instancji singletonu dla użytkownika getInstance()
, byłoby to ukryte, a on / ona używałaby EventSchedulerDao.get(name)
itd. W sposób statyczny. Czy to coś, czy to tylko ja?
Czy powinienem, czy nie powinienem mieć singleton DAO?
I na marginesie, czy w porządku jest moje podejście do posiadania otwartych drzwi dla użytkownika do wdrożenia własnych DAO?