Saya mengembangkan API tenang dan saya pikir itu nyaman untuk menggunakan DAO untuk sumber daya saya karena walaupun saya berencana hanya menggunakan memori untuk menyimpannya, saya tidak ingin menutup pintu kepada siapa pun yang menggunakan perpustakaan saya jika mereka memutuskan untuk menggunakan implementasi basis data untuk DAO.
Pertanyaan saya adalah apakah DAO harus tunggal atau tidak. Jika tidak, layanan akan memiliki instance DAO dan akan terlihat seperti ini:
@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);
}
}
Sementara jika DAO adalah singleton, tapi saya kira tidak akan ada banyak perbedaan, hanya di baris pertama:
private IEventSchedulerDao dao = EventSchedulerDao.getInstance();
Saya masih harus menggunakan IEventSchedulerDao
contoh, tapi saya kira semua lajang bekerja seperti ini kan? Untuk beberapa alasan saya selalu menghubungkan singleton dengan metode statis, jadi alih-alih memiliki instance tunggal yang terlihat oleh pengguna getInstance()
, ini akan disembunyikan dan dia hanya akan menggunakan EventSchedulerDao.get(name)
, dll ... dengan cara statis. Apakah ini sesuatu atau ini hanya saya?
Jadi, haruskah saya atau saya tidak memiliki DAO tunggal?
Dan sebagai pertanyaan sampingan, apakah tidak apa-apa pendekatan saya untuk membuka pintu bagi pengguna untuk mengimplementasikan DAO mereka sendiri?