Я розробляю API RESTful, і я думаю, що зручно використовувати 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?