konto usunięte

Temat: [Doctrine2] widoki

Jak radzicie sobie z brakiem widoków w Doctrinie ?

ORM jakby nie patrzeć wygodny, ale widoki przydatne.
Jedyne co w internecie znalazłem na temat widoków to:
"Native MySQL Views handling and generating is not supported by Doctrine2"Łukasz Ciołek edytował(a) ten post dnia 17.11.11 o godzinie 14:31
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: [Doctrine2] widoki

Widok jest na ogol skomplikowana i zapisana kwerenda. Doctrine2 sam potrafi oceniach niektore aspekty wydajnosciowe, widok mozna zrobic poprostu dodajac metode do repozytorium (nie svn, a repozytorium encji doctrine) i wtedy mozna robic dowolnie skompikowane zapytania, ktore beda prostsze do utrzymania niz widoki.

Mama nadzieje, ze to pomaga:)

konto usunięte

Temat: [Doctrine2] widoki

fakt, wszystkie zapytania piszę w EntityRepository.
ale czy to nie jest tak, że dla widoku plan wykonania zapytania wykonuje się raz i jest zapisywany?
Po prostu nie wiem jak bardzo mogę zaufać Doctrinowi, jego cachowaniu itd. itp.

Doctrin jest pod Symfony2.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: [Doctrine2] widoki

Skoro potrzebujesz widoki, to może używasz złego narzędzia do osiągnięcia swoich celów ? Jeżeli potrzebujesz wygenerować np. raport czy jakieś większe zestawienie danych, które bez sensu nawet pakować w encje to zrób bezpośrednie zapytanie do bazy danych i tyle, kłania się CQRS...

konto usunięte

Temat: [Doctrine2] widoki

oczekiwałem właśnie propozycji innych (lepszych) rozwiązań, przyjrzę się temu.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: [Doctrine2] widoki

Łukasz Ciołek:
oczekiwałem właśnie propozycji innych (lepszych) rozwiązań, przyjrzę się temu.
Ja tak właśnie zrobiłem w jednym projekcie i spisuje się bardzo dobrze, tak jak wspominałem poczytaj sobie o CQRS. Btw. możesz użyć tego samego połączenia do bazy danych, które nawiązujesz w przypadku Doctrine, możesz wykorzystać DBAL, który jest warstwą abstrakcji pod Doctrine, żeby łatwo formułować zapytania.
Adam Brodziak

Adam Brodziak PHP, football, fun

Temat: [Doctrine2] widoki

Wojciech Soczyński:
Łukasz Ciołek:
oczekiwałem właśnie propozycji innych (lepszych) rozwiązań, przyjrzę się temu.
Ja tak właśnie zrobiłem w jednym projekcie i spisuje się bardzo dobrze, tak jak wspominałem poczytaj sobie o CQRS.

Logika w zapytaniach SQL? Nie brzmi to zbyt przekonująco. Jak radzisz sobie z testowaniem i reużywalnością kodu (rzeczonej logiki, czy to biznesowej czy prezentacji)?
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: [Doctrine2] widoki

Adam Brodziak:
Wojciech Soczyński:
Łukasz Ciołek:
oczekiwałem właśnie propozycji innych (lepszych) rozwiązań, przyjrzę się temu.
Ja tak właśnie zrobiłem w jednym projekcie i spisuje się bardzo dobrze, tak jak wspominałem poczytaj sobie o CQRS.

Logika w zapytaniach SQL? Nie brzmi to zbyt przekonująco. Jak radzisz sobie z testowaniem i reużywalnością kodu (rzeczonej logiki, czy to biznesowej czy prezentacji)?
Nie wspominałem w żadnym miejscu tutaj o logice w zapytaniach SQL, chyba, że mi coś umknęło ? Ja tylko mówię, tyle, że nie zawsze jest sens operować na encjach i zaprzęgać Doctrine do niektórych zadań, których przykładem jest np. raportowanie - jeżeli mamy wyliczyć prosty raport z powiedzmy miliona encji, sprowadzi się to do pobrania tych miliona encji i powiedzmy wykonaniu jakiejś operacji typu Map-Reduce na nich. Jednakże jeżeli wyliczenie tego w bazie danych będzie efektywniejsze to czemu nie ? Warunkiem jest tylko to by cała operacja wyliczania takiego raportu była ukryta np. w klasie jakiegoś Service, a nie byśmy żonglowali SQL-em po całej aplikacji.
Adam Brodziak

Adam Brodziak PHP, football, fun

Temat: [Doctrine2] widoki

Wojciech Soczyński:
(...)
Nie wspominałem w żadnym miejscu tutaj o logice w zapytaniach SQL, chyba, że mi coś umknęło ? Ja tylko mówię, tyle, że nie zawsze jest sens operować na encjach i zaprzęgać Doctrine do niektórych zadań, których przykładem jest np. raportowanie - jeżeli mamy wyliczyć prosty raport z powiedzmy miliona encji, sprowadzi się to do pobrania tych miliona encji i powiedzmy wykonaniu jakiejś operacji typu Map-Reduce na nich. Jednakże jeżeli wyliczenie tego w bazie danych będzie efektywniejsze to czemu nie ? Warunkiem jest tylko to by cała operacja wyliczania takiego raportu była ukryta np. w klasie jakiegoś Service, a nie byśmy żonglowali SQL-em po całej aplikacji.

Zgadza się, jednak w tym Service będzie jakiś SQL generujący raport. To znaczy że logika raportowania też jest w SQL, co trudno testować.

Druga rzecz to co jest produktem takiego raportu? Czy są to modele stworzone specjalnie dla danego raportu (co można by łatwo zaimplementować widokami)? Co z sytuacją gdy częścią raportu jest dany model (dajmy na to pracownik) i zagregowana wartość (wartość zamówień na miesiąć).
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: [Doctrine2] widoki

Adam Brodziak:
Wojciech Soczyński:
(...)
Nie wspominałem w żadnym miejscu tutaj o logice w zapytaniach SQL, chyba, że mi coś umknęło ? Ja tylko mówię, tyle, że nie zawsze jest sens operować na encjach i zaprzęgać Doctrine do niektórych zadań, których przykładem jest np. raportowanie - jeżeli mamy wyliczyć prosty raport z powiedzmy miliona encji, sprowadzi się to do pobrania tych miliona encji i powiedzmy wykonaniu jakiejś operacji typu Map-Reduce na nich. Jednakże jeżeli wyliczenie tego w bazie danych będzie efektywniejsze to czemu nie ? Warunkiem jest tylko to by cała operacja wyliczania takiego raportu była ukryta np. w klasie jakiegoś Service, a nie byśmy żonglowali SQL-em po całej aplikacji.

Zgadza się, jednak w tym Service będzie jakiś SQL generujący raport. To znaczy że logika raportowania też jest w SQL, co trudno testować.

Druga rzecz to co jest produktem takiego raportu? Czy są to modele stworzone specjalnie dla danego raportu (co można by łatwo zaimplementować widokami)? Co z sytuacją gdy częścią raportu jest dany model (dajmy na to pracownik) i zagregowana wartość (wartość zamówień na miesiąć).

Taka jest prawda, że to wszystko zależy od konkretnego przypadku, ciężko jest generalizować, trzeba wziąć konkretny case, a i jeszcze się okaże, że w konkretnym przypadku ale w różnych kontekstach użycia jest inaczej... :P.

Tak czy inaczej, cokolwiek ma do czynienia z jakimś I/O będzie ciężko testowalne, oczywiście można stworzyć mock, ale wtedy przetestujemy tylko klasę Service'u. Można też, zrobić z naszego raportu widok, lub procedurę, ale wtedy wracamy do starego sposobu pisania aplikacji. Są dwa "czyste" wyjścia z tej sytuacji:

1. pobieramy tylko dane potrzebne do raportu, wyliczamy go w klasie Service'u
2. raport wyliczamy tworząc job w jakimś środowisku Map-Reduce albo przy pomocy bazy NoSQL, z założeniem takim, że mamy narzędzia, dzięki, którym będziemy w stanie przetestować funkcję wyliczającą raport

To, które wyjście wybierzemy oczywiście zależy od wielu czynników, ale najważniejszym będzie to, jak bardzo chcemy by nasza aplikacja była zależna od jakiś zewnętrznych systemów. Jeżeli ma być niezależna to opcja nr.1 a jeżeli zależna to można się zdecydować na opcję nr.2 albo "Old School SQL"Wojciech Soczyński edytował(a) ten post dnia 23.11.11 o godzinie 14:11

Podobne tematy


Następna dyskusja:

PDO i widoki w MySQL




Wyślij zaproszenie do