Ich entwickle eine RESTful-API und halte es für zweckmäßig, DAOs für meine Ressourcen zu verwenden, da ich, obwohl ich beabsichtige, nur Speicher zum Speichern dieser Ressourcen zu verwenden, nicht die Tür zu jedem schließen möchte, der meine Bibliothek verwendet, wenn er dies möchte eine Datenbankimplementierung für das DAO.
Meine Frage ist, ob das DAO ein Singleton sein soll oder nicht. Ist dies nicht der Fall, verfügt der Dienst über eine Instanz des DAO und sieht ungefähr so aus:
@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);
}
}
Wenn das DAO ein Singleton wäre, aber ich denke, es würde keinen großen Unterschied geben, nur in der ersten Zeile:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Ich müsste immer noch eine IEventSchedulerDao
Instanz verwenden, aber ich denke, alle Singletons funktionieren so, oder? Aus irgendeinem Grund korreliere ich Singletons immer mit statischen Methoden. Anstatt also eine Singleton-Instanz für den Benutzer sichtbar zu machen getInstance()
, wird diese ausgeblendet und er / sie verwendet nur EventSchedulerDao.get(name)
usw. auf statische Weise. Ist das eine Sache oder bin das nur ich?
Soll ich also einzelne DAOs haben oder nicht?
Und als Nebenfrage, ist es in Ordnung für mich, offene Türen zu haben, damit der Benutzer seine eigenen DAOs implementieren kann?