Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony2] Event listeners - sens i korzystanie.
BigPig
post 6.08.2014, 21:58:05
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

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


Witajcie,

Nie mam potężnego doświadczenia w fw i w związku z tym zainteresowało mnie zagadnienie event listenerów.

Trochę sobie o nich poczytałem, ale ciężko mi sobie wyobrazić jakieś fajne sytuacje, gdzie można by je wykorzystać(oprócz tego opisanego w dokumentacji).

1) Dacie jakieś przykłady?
2) Czy m.in. można nimi zastępować mysql'owe triggery(wyzwalacze) i czy to jest sensowne(czy takie jest m.in. przeznaczenie event listenerów)?
3) Zamiast bawić się w mysql'owe triggery może lepiej krok po kroku usuwać wpisy w ten sposób?
  1. $em->remove($obiekt1);
  2. $em->remove($obiekt2);
  3. $em->remove($obiekt3);
  4. $em->flush();


Ten post edytował BigPig 7.08.2014, 07:38:22
Go to the top of the page
+Quote Post
Crozin
post 6.08.2014, 23:28:34
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Pytasz o zdarzenia w kontekście Symfony czy Doctrine?
2. Można, ale raczej nie ma to większego sensu, chyba że w takim wyzwalaczu potrzebowałbyś mieć dostęp do danych/narzędzi aplikacji, a nie surowej bazy danych.
3. Bazy danych obsługują, a Doctrine wspiera kaskadowe usuwanie danych, więc nie ma potrzeby dla tego typu wynalazków.
Go to the top of the page
+Quote Post
skowron-line
post 7.08.2014, 06:11:30
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


ORM ma przejac wszystkie zadania na bazach wiec lepszym pomyslem jest przeniesienie triggerow na ORMowe klasy, bo kiedy baza czegos nie może to ORM to ogarnie, nie ma tez problemow z migracjami na inne bazy danych bo w 99% wystarczy tylko zmienić providera.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Crozin
post 7.08.2014, 07:12:44
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@skowron-line: Troszkę się pośpieszyłeś z tym stwierdzeniem, że ORM ma przejąć wszystkie zadania (nie ma) oraz że zmiana bazy danych ogranicza się do zmiany sterownika - chyba, że mówimy o strasznie trywialnych aplikacjach.
Go to the top of the page
+Quote Post
phpion
post 7.08.2014, 07:19:13
Post #5





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@skowron-line:
Ja akurat jestem zdania, że wszystko co się da lepiej robić po stronie bazy danych (triggerami czy chociażby usuwaniem kaskadowym). Zyskasz przede wszystkim na wydajności, a przede wszystkim na spójności danych. Ingerując w zawartość bazy z poziomu samej bazy danych (pomijając aplikację) masz pewność, że operacje powiązane również zostaną wykonane. Oczywiście są sytuacje, gdy nie będziesz w stanie wykonać czegoś po stronie bazy (z technicznego punktu widzenia) i będziesz zmuszony zrobić to po stronie aplikacji, ale co się da dawałbym po stronie bazy.
Go to the top of the page
+Quote Post
BigPig
post 7.08.2014, 08:50:12
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

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


@Crozin
1) Kurde, a ja myślałem, że te zagadnienie dotyczy tak samo symfony jak i doctrine. A więc jeśli chodzi o odpowiedź to mogą być w kontekscie symfony i doctrine osobno smile.gif

Wszystkie odpowiedzi były przydatne. Póki co to część przeniosę do ORM'a i tam gdzie będzie się dało użyje usuwania kaskadowego. Na wydajności nie specjalnie mi zależy bo i tak projekt zawsze będzie działać na localu, aczkolwiek na przyszłość chciałem wiedzieć co i jak. Póki co najważniejsze to dobrze poznać symfony 2 smile.gif

Ten post edytował BigPig 7.08.2014, 08:50:34
Go to the top of the page
+Quote Post
Crozin
post 7.08.2014, 09:01:02
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Oba narzędzia wykorzystują na dobrą sprawę ten sam mechanizm, ale - co oczywiste - do innych celów. Przykładowo w Doctrine możesz wykorzystać zdarzenia w celu:
- zmodyfikowania obiektów tuż przed ich zapisem do bazy (np. w celu dodania daty i adresu IP osoby modyfikującej dany obiekt),
- zmodyfikowania zapytań SELECT DQL-a tak, by ignorowały obiekty oznaczone jako usunięte, a zapytania DELETE zamienić na UPDATE (tzw. softDeleteable),
- zmodyfikowania struktury mapowań Doctrine'a.
W Symfony, z racji tego że jest to znacznie obszerniejsza biblioteka, zdarzeń można tego wykorzystać już do setek rzeczy, np.:
- wykonania jakiejś wspólnej akcji dla wszystkich kontrolerów z danego bundle'a,
- wysłaniu maila do autora jakiegoś obiektu domeny po jego usunięciu,
- aktywacji użytkownika, który rejestruje się jakąś zaufaną metodą (np. poprzez OpenID),
- zablokowaniu dostępu do danych akcji danym użytkownikom,
- ...tutaj można by wymieniać bez końca.
Go to the top of the page
+Quote Post
skowron-line
post 7.08.2014, 10:49:10
Post #8





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat(Crozin @ 7.08.2014, 06:12:44 ) *
@skowron-line: Troszkę się pośpieszyłeś z tym stwierdzeniem, że ORM ma przejąć wszystkie zadania (nie ma) oraz że zmiana bazy danych ogranicza się do zmiany sterownika - chyba, że mówimy o strasznie trywialnych aplikacjach.

No dobra moze wszystkich było nadużyciem, chodzi mi głównie o triggery.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
tabbi
post 10.08.2014, 12:35:55
Post #9





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 30.10.2010

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


Poniekąd mogę dodać, że dobrą praktyką jest przenoszenie logiki biznesowej do event listenerów: http://stackoverflow.com/questions/1915472...ony-application
Gdy z punktu widzenia biznesu np. przy tworzeniu nowego użytkownika powinno się wysyłać email informacyjny, powiadomić innych użytkowników itp.. tego typu rzeczy dobrze trzymać w event listenerach.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 20:33