Я разрабатываю RESTful API, и я думаю, что для моих ресурсов удобно использовать DAO, потому что, хотя я планирую просто использовать память для их хранения, я не хочу закрывать дверь тому, кто использует мою библиотеку, если они решили использовать реализация базы данных для DAO.
Мой вопрос заключается в том, должен ли DAO быть одиночным или нет. Если это не так, у службы будет экземпляр DAO, и он будет выглядеть примерно так:
@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);
}
}
Хотя, если бы DAO был синглтоном, я думаю, что не было бы большой разницы, только в первой строке:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Я все еще должен был бы использовать IEventSchedulerDao
экземпляр, но я предполагаю, что все одиночные игры работают как это правильно? По какой-то причине я всегда сопоставляю синглтоны со статическими методами, поэтому вместо того, чтобы одноэлементный экземпляр был видим для пользователя getInstance()
, он будет скрыт, и он / она будет просто использовать EventSchedulerDao.get(name)
и т. Д. ... в статическом режиме. Это вещь или это только я?
Итак, я должен или не должен иметь одиночные DAO?
И как побочный вопрос, хорошо ли мой подход, чтобы у пользователя были открытые двери для реализации своих собственных DAO?