![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 5 Dołączył: 26.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Siema,
pisze do was z następującym problemem... zastanawiam się czy we dopuszczalne jest uzycie repozytorium w encji, (chodzi mi o metode setProfil)
Czy powinienem odwoływac się do repozytorium z poziomu encji czy raczej przeslać obiekt (wykorzystujac metode addProfil). Jak wy robicie? Ten post edytował Psajkus 26.06.2011, 11:12:49 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jest to dopuszczalne, aczkolwiek powinieneś to repozytorium przekazać do obiektu jak każdą inną zależność - poprzez wstrzyknięcie.
Inna sprawa, że w DDD bardzo ważne jest podejście Design By Contract i - w idealnym świecie programisty - zależność tego repozytorium powinna być zapodana jako interfejs. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 5 Dołączył: 26.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
A jak powinno wyglądać tworzenie encji dla kolekcji userow . Czy powinienem pobrać tablice danych w jednym zapytaniu joinem i na podstawioe nich stworzyc encje czy tworzyc kilka osobnych zapytań, np.:
1) zapytanie z joinem
2) zwykly select
3) tworze kolekcje userow bez pobierania profilu i dopiero w widoku gdy wyswietlam userow wywoluje metdoe (z pierwszego postu) getProfil, ktora zwroci mi obiekt Profil. 4) jakieś inne rozwiązanie? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat jakieś inne rozwiązanie? Nie myślałeś nad wykorzystaniem Doctrine2 jako warstwy DAO? Architektura projektu pasuje idealnie do Twojego w dodatku oszczędziło by Ci to masę pracy.Co do tego czy wykonać zapytanie SELECT z JOIN-em czy SELECT + n SELECT-ów. W zdecydowanej większości przypadków to pierwsze - bo będzie to po prostu wydajniejsze. To ostatnie możesz stosować np. w przypadku gdy pobierasz kolekcję 10 użytkowników, którą wyświetlasz jako jakąś listę ale dla przykładowo pierwszego elementu tej listy pozna nazwą użytkownika wyświetlasz też jakieś dane z jego profilu. Generalnie możesz poszukać sobie pod frazą "fetch eager lazy" - powinieneś znaleźć sporo materiałów bo jest to dosyć popularne zagadnienie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 5 Dołączył: 26.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zastosowanie Doctrine na pewno pomogłoby w uzyskaniu efektu o który mi chodzi ale nie pomogłoby mi w zaspokojeniu ciekawości (IMG:style_emoticons/default/wink.gif) . Chciałbym się dowiedzieć jak rozwiązuje się taki problem (poza tym w tym projekcie nie moge zastosować Doctrine).
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pierwsze podejście to tzw. "eager fetching" czyli pobranie wszystkiego zawczasu. Jeżeli wiesz że będziesz potrzebować obiektu UserProfile dla (niemalże) każdego obiektu User powinieneś zastosować tą metodę.
Drugie podejście jest niemalże z definicji złe. Trzecie podejście to tzw. "lazy fetching" czyli dobieranie obiektu UserProfile na żądanie (w momencie wywołania User::getProfile()). Przydatne gdy obiektu UserProfile będziesz potrzebować dla bardzo nielicznych obiektów User z całej kolekcji. Jak już wcześniej powiedziałem więcej na temat obu metod znajdziesz w sieci. Cytat poza tym w tym projekcie nie moge zastosować Doctrine Teraz to ja muszę zaspokoić ciekawość. (IMG:style_emoticons/default/wink.gif) Dlaczego?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 5 Dołączył: 26.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Projekt, który odziedziczyłem jest spitolony. I jest to duzy projekt wciaz rozwijany (chociaz mam nadzieje, ze dazy ku koncowi! (IMG:style_emoticons/default/wink.gif) ) i zastosowanie Doctrine nie jest chyba najlepszym wyjsciem (a taki mix nie bylby wesoly). Zreszta Doctrine 2 pracuje na php 5.3 a serwis jest na serwerze php 5.2.
Dotychczas pobrane dane byly przekazywane bezposrednio do widoku w postaci tablicy. Ma to moze swoje plusy (jest wydajniejsze niz tworzenie wpierw obiektow) ale czy zgodne z OOP? Moim zdaniem powinno pracowac sie na obiektach. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 06:29 |