ฉันกำลังพัฒนา 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 ของตัวเอง?