program bazodanowy jak tworzyć połączenie

0

Witam,

mam pewien dylemat. Napisałem prosty program bazodanowy. Aktualnie zrodziła mi się pewna wątpliwość. Jak technicznie powinienem rozwiązać problem z wysyłaniem zapytań. Aktualnie zrobiłem tak, że mam klasę z metodami select, insert, itp. Tworze ją na początku programu od razu logując się do bazy(tworzę połączenie). Następnie przekazuję (pomiędzy formatkami) te klasę jako parametr w konstruktorze każdej z formatek(konstruktor przypisuje tę moją aktywną klasę sql do zadeklarowanej w ciele klasy). Mniej więcej tak:
konstruktor:

        public test_form(sql_class.sql sql)
        {
            this.test_sql = sql;
            InitializeComponent();
        }

Teraz w każdej z formatek gdy używam bazy danych posługuje się test_sql, która defakto jest tą pierwszą klasą czy może to już kolejną klasą? Może powinienem to jakoś inaczej rozwiązać? Np tworząc przed każdym wykonaniem zapytania moją klasę sql? Moje pytanie końcowe jest takie: Jak elegancką i jak najbardziej optymalnie rozwiązać ten problem?

0

Po pierwsze - nie ma czegoś takiego jak "najbardziej optymalnie". Albo coś jest optymalne albo nie.

Po drugie - wiązanie kodu GUI z jakimiś klasami dostępu do danych jest koszmarnym rozwiązaniem, które sprawi masę problemów z testowaniem, debugowaniem, utrzymaniem i modyfikacjami w aplikacji. Powinieneś zainteresować się architekturą wielowarstwową i wzorcami typu np. MVP. W skrócie chodzi o to, żeby warstwa interfejsu użytkownika odwoływała się do warstwy logiki aplikacji, która dopiero odwołuje się do warstwy dostępu do danych, a między tymi warstwami przekazywane są odpowiednie obiekty-encje danych, będące odpowiednikami tabel z BD. Wówczas zyskujesz na elastyczności i łatwości wprowadzania zmian.

Po trzecie - wyważasz chyba otwarte drzwi. Po co Ci klasa z metodami do zapytań SQL? Nie prościej byłoby użyć jakiegoś ORM (Linq to SQL, Entity Framework, NHibernate)? Miałbyś od razu klasy powiązane z tabelami, a kod SQL generowałby się automagicznie, zaoszczędzając Ci pracy.

0

Do autora - czemu chcesz koniecznie te klasę utworzyć od razu i przekazywać do wszystkich form instancję? Czy to znaczy, że to powinien być singleton? :( Czy nie prościej zawsze używać nowej instancji tej klasy w każdym miejscu w kodzie, gdzie tylko potrzebujesz dostępu do danych?

Po trzecie - wyważasz chyba otwarte drzwi. Po co Ci klasa z metodami do zapytań SQL? Nie prościej byłoby użyć jakiegoś ORM (Linq to SQL, Entity Framework, NHibernate)? Miałbyś od razu klasy powiązane z tabelami, a kod SQL generowałby się automagicznie, zaoszczędzając Ci pracy.

Nie do końca się zgadzam. Tak - Linq2SQL jest wygodne, pomocne itd,. ale czy naprawdę jest przymus korzystania z tego, tudzież NHibernate? Aplikacja może świetnie działać bez ORM'ów.

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