[SF][Symfony2] Event listeners - sens i korzystanie. |
[SF][Symfony2] Event listeners - sens i korzystanie. |
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?
Ten post edytował BigPig 7.08.2014, 07:38:22 |
|
|
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. |
|
|
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/ |
|
|
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.
|
|
|
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. |
|
|
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 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 Ten post edytował BigPig 7.08.2014, 08:50:34 |
|
|
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. |
|
|
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%) |
@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/ |
|
|
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. |
|
|
Wersja Lo-Fi | Aktualny czas: 17.04.2024 - 06:44 |