Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DAO
ayeo
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Witam!
Piszę sobie obiektową otoczkę dla bazy danych. Mam kilka wątpliwości. Jeżeli wyszykuję w jakiejś tabeli rekordu to sprawa jest prosta, zwraca mi obiekt klasy tej tabeli (np DAO_User). Co jednak jeśli złączę kilka tabel? Co wtedy powinienem dostać?
Pozdrawiam!
Go to the top of the page
+Quote Post
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Powinieneś mieć jakiś z góry ustalony sposób zwracania danych z DAO.

1. Tablica.
2. Popularnym w wielu frameworkach jest tworzenie dodatkowej, generycznej, klasy Record (i RecordSet, czyli zbiór rekordów) uzbrojoną w zestaw metod potrzebnych do wyciągnięcia z niej danych - którą w miarę potrzeb możesz rozszerzać dla specyficznych przypadków.
Go to the top of the page
+Quote Post
ayeo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Chcę mieć zwrócony obiekt dostępowy. Mogę zrobić uniwersalny obiekt, ale jak mam złączenie w zapytaniu to co jeśli wywołam metodę save(); Skąd wiem, które dane zapisać do której tabeli?
Go to the top of the page
+Quote Post
LBO
post
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No to albo powinien to obsługiwać twój model danych na podstawie tego co łączy i jak; albo określić inny niż domyślny obiekt dostępu i przeładować metodę save() jeżeli podstawowe funkcje DAO nie są w stanie tego zautomatyzować.

Ten post edytował LBO 24.04.2008, 22:50:56
Go to the top of the page
+Quote Post
ayeo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Ale skąd bez analizy zapytania sql mam wiedzieć co zapisać, w której tabeli?
Go to the top of the page
+Quote Post
LBO
post
Post #6





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Metadanymi?

Zaszytymi modelach informacjami o relacjach etc...

Ten post edytował LBO 24.04.2008, 22:58:48
Go to the top of the page
+Quote Post
ayeo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Jeżeli w tabeli występuje klucz obcy to oczywiście będzie on zapisany w modelu danych. To nie jest problem. Problemem jest jeżeli w zapytaniu połącze tabele w niestandardowy (z punktu widzenia modelu danych) sposób.
Go to the top of the page
+Quote Post
LBO
post
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Tzn... Możesz podać przykład?

I nie rozumiem stwierdzenia "w niestandardowy sposób" - w pojęciu modelu nie ma czegoś takiego. Jednakże, wydaje mi się, że jeżeli już takie "niestandardowe łączenie" występuje, powinieneś dopisać jego obsługę w konkretnym modelu - z samej nazwy można wywnioskować, że coś podobnego występuje sporadycznie.
Go to the top of the page
+Quote Post
ayeo
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Może inaczej. Łączę tablę użytkownik i grupa po id. Dostaję tablicę wyników. Jak ją przerobić na kolekcję obiektów. Jak mogę sprawdzić, które pole należy do której tabeli? Łopatologicznie proszę i najlepiej z przykładem. Mam dość spory bałagan w głowie w tej kwestii.
Dziękuję za wsześniejsze wskazówki i za cierpliwość.
Pozdrawiam!
Go to the top of the page
+Quote Post
LBO
post
Post #10





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Heeh, chyba trochę za późno na to - po za tym z prostego DAO wyszedłby z tego ORM (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdraiwam, LBO.

P.S. Pomyśl nad jakimś gotowym rozwiązaniem.
Go to the top of the page
+Quote Post
ayeo
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Piszę to w celach edukacjnych więc gotowe rozwiązania odpadają. Patrzę jak to wygląda w Propelu właśnie. Link: http://propel.phpdb.org/trac/wiki/Users/Do...3/Relationships
Go to the top of the page
+Quote Post
MMPrime
post
Post #12





Grupa: Zarejestrowani
Postów: 79
Pomógł: 12
Dołączył: 23.04.2008

Ostrzeżenie: (0%)
-----


Standaryzacja! Tymże jeżeli standaryzujemy to jak najmniej, najwygodniej. Choć sam nie stosuje DAO w swoich projektach to wykonanie było by banalne ponieważ mapuje tabelę i prefiksy ich kolumn tak by były unikalne. Dla przykładu dla tabeli users kolumny to: u_id, u_name. Tabela news ma natomiast: n_id, n_name.

Prefiksy muszą być unikalne i wiadomo do której tabeli należy dana.
Go to the top of the page
+Quote Post
ayeo
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


Dzięki! Propozycja jest dobra, ja jednak lubię uniwersalne rozwiązania. Popatrzyłem trochę jak to wygląda w Propelu i zrobię coś na podobnej zasadzie. Na początek zapiszę dane na sztywno w klasach tabel. Dziękuję wszystkim za wskazówki. Jeżeli ktoś ma jeszcze jakieś sugestie to będę zobowiązany!
Pozdrawiam!
Go to the top of the page
+Quote Post
jarek_bolo
post
Post #14





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

Ostrzeżenie: (0%)
-----


Odniosę się do Twojego przykładu user i group.

Klasy jak będą Ci potrzebne to UserDAO, GroupDAO, UserVO, GroupVO (bliżej o tym tutaj).

Do tego należało by wykorzystać dobry pomysł MMPrime z mapowaniem nazw kolumn. Tylko pytanie czy robić to poprzez klasy DAO czy od razu już nadać odpowiednie nazwy kolumnom w poszczególnych tabelach.

I teraz w zależności w jakim kontekście będziesz używać złączenia Users i Groups musisz wybrać w której z klas DAO zaimplementować metodę złączającą usera z groupą.
Po złączeniu otrzymasz result z DB który przekażesz do konstruktorów poszczególnych obiektów UserVO i GroupVO, a konstruktor już sobie wyłuska interesujące go pola.
Następnie zrobisz co tam chcesz zrobić na tych danych i biorąc pod uwagę relacje między nimi (klucze obce) zwrócisz te obiekty VO do odpowiadających im klas DAO by wykonać metodę DAO->save().
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 22:51