Witam,
może w ramach wprowadzenia do wątku powiem, iż ogólnie programista ze mnie średni, a z Qt mam ponieką "trochę" doczynienia za sprawą projektu zespołowego, który robiliśmy na zaliczenie zajęć uczelnianych.. (kumpel bardziej preferuje Qt niż te wszystkie popularne Javy, C#y etc...Mnie osobiście też się Qt spodobał ;)).
Ale do rzeczy..
Chciałbym tutaj odnieść się do kwestii projektowania aplikacji bazodanowej.. Do tej pory w ramach wspomnianego już projektu zespołowego robiliśmy tak, iż operacje dodawania/edytowania/usuwania np. użytkowników wykonywaliśmy na zasadzie poniższego (pseudo)kodu:
QString query= "select * from uzytkownicy";
MySql->SelectRow(query); //to przygotowana przez Nas klasa
następnie dane były ładowane np. do QStringList i przekazywane na kontrolki lineEdit->text(); (lub coś w ten deseń..)
Pewnie można tu zastosować trochę inną "metodę", np. stosując klase QSqlQuery:
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
"VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Bart");
query.addBindValue("Simpson");
query.exec();
(tworząc tak zapytania zachowuje się większy poziom bezpieczeństwa ? Coś chyba tak czytałem kiedyś..)
..ale ogólnie chciałbym odnieść się do kwestii wykorzystania podejścia model/view i realizacji "obiektowości" z której wynika podział na warstwy aplikacji..
Z tego co niegdyś czytałem (sam użyłem tego po części w innym moim projekcie w C#) np. przy wyciąganiu danych o uzytkownikach z DB, warto stworzyć klasę uzytkownik, w której będą "czasowo" przetrzymywane dane i za pomocą metod umieszczane np. w bazie danych.. Natomiast przeglądając sobie przykłady ( http://qt-project.org/doc/qt-4.8/examples-sql.html ) z Qt-Project na temat SQLa, głównie są one oparte na architekturze model/view, która nijako ma się do podejścia obiektowego.. (przynajmniej w tych przykładach tego nie ma..).
Więc teraz pytanie, które mi się nasunęło - czy w Qt zalecane jest używanie podejścia model/view i operowanie na danych, wyświetlanie danych w tabelach, etc właśnie z wykorzystaniem modeli i przygotowanych pod to klas..? Czy może lepiej byłoby "olać" tą architekture i samemu przygotować klasy i metody w których i tak na końcu skorzysta się z QSqlQuery do operowania na bazie ? A może te dwa "podejścia" można jakoś użytecznie połączyć?
[Napomnę tylko, iż z tego co czytałem w Javie czy C# stosuje się ORMy (np. framework hibernate), które de facto też działają właśnie na podejściu obiektowym..]
Uff, to chyba tyle ode mnie.. (mam nadzieje, że to co napisałem jest zrozumiałe ;) )
Pozdrawiam,
Marcin