我正在开发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开门吗?