Wzorzec DAO czy go dobrze rozumiem

0

Witam
Chciałem się zapytać czy dobrze rozumiem idee zastosowania wzorca DAO. Mam encję Hala oraz klasę mapującą przy wykorzystaniu FluentNHibernate. Natomiast tak wygląda singleton klasa DAO - dostępowa do encji Hala. Pytanie czy właśnie tak wygląda wzorzec DAO - to wszystko ? Tak prosto ?

  public class HalaDAO
    {
        private static HalaDAO instance;
        public static HalaDAO Instance
        {
            get
            {
                if (instance == null)
                    instance = new HalaDAO();
                return instance;
            }
        }
        public HalaDAO() { }
        public Hala Get (int id)
        {
 
                Hala hala = new Hala();
                using (ISession session = FluentHibernateConfig.Configure().OpenSession())
                {
                    hala = session.QueryOver<Hala>().Where(x => x.NumerHali == id).SingleOrDefault<Hala>();
                }
 
 
            return hala;
        }
        public List<Hala> Get()
        {
            List<Hala> listaHal = new List<Hala>();
            using (ISession session = FluentHibernateConfig.Configure().OpenSession())
            {
                listaHal = (List<Hala>)session.QueryOver<Hala>().List<Hala>();
            }
            return listaHal;
        }
    }
 
0

Powinieneś mieć interfejs moim zdaniem, który dopiero implementujesz dla konkretnej encji i jeszcze ewentualnie dla konkretnego źródła danych dodajesz kolejną warstwę. Tu masz przykład jak to wygląda: http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm (Java)

Btw dlaczego w Get tworzysz obiekt Hala skoro i tak potem zwracasz co innego?

0
a.dudek76 napisał(a):

Witam
Natomiast tak wygląda singleton klasa DAO - dostępowa do encji Hala. (...)

  public class HalaDAO
    {
        private static HalaDAO instance;
        public static HalaDAO Instance
        {
            get
            {
                if (instance == null)
                    instance = new HalaDAO();
                return instance;
            }
        }
        public HalaDAO() { }
        public Hala Get (int id)
        {
 
                Hala hala = new Hala();
                using (ISession session = FluentHibernateConfig.Configure().OpenSession())
                {
                    hala = session.QueryOver<Hala>().Where(x => x.NumerHali == id).SingleOrDefault<Hala>();
                }
 
 
            return hala;
        }
        public List<Hala> Get()
        {
            List<Hala> listaHal = new List<Hala>();
            using (ISession session = FluentHibernateConfig.Configure().OpenSession())
            {
                listaHal = (List<Hala>)session.QueryOver<Hala>().List<Hala>();
            }
            return listaHal;
        }
    }
 

To nie jest singleton - konstruktor jest publiczny wiec mozna stworzyc tyle instancji tej klasy ile sie chce. Zeby to byl singleton to konstruktor powinien byc prywatny.
To tak abstrahujac zupelnie od pytania :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1