TomRiddle napisał(a):
Np gdyby ktoś podał zły
SECRET_KEYw.env, to chciałbym żeby część userowa na to zareagowała inaczej niż część adminiowa albocronowa.
No to jest akurat przykład prawidłowego użycia wyjątku, tylko jak niby różne części mają na to różnie reagować? Aplikacja nie działa, jest pożar na prodzie, co tu więcej zrobić? :P
A co do postu @somekind, to to nie są 3 aplikacje. To jest jedna aplikacja, do której mogą się zalogować dwa typy userów (plus job w cronie). Panel admina i panel usera to jedna aplikacja.
Ok, więc jedna aplikacja, ale powiedzmy, że 3 moduły. Moje pytania nadal aktualne - po co więcej niż jeden catch dla jednego modułu?
TomRiddle napisał(a):
To tak na prawdę, gdyby takie potencjalne źródło problemu mogło wyjść z bardzo niskiego poziomu z logiki biznesowej, to to by znaczyło że praktycznie każda funkcja u mnie musiałaby zwracać
Either. I'm not sure :/
To jakiś duży problem?
Poza tym, jeśli upewnisz się co do poprawności danych w logice aplikacyjnej, wtedy nie potrzebujesz eitherów w logice biznesowej, bo jesteś w stanie tworzyć ją w spójny sposób.
No, niby tak, ale ten sam problem jest z Eitherami, ktoś go może przechwycić i zwrócić inny either.
No nie bardzo, bo to jest wartość zwracana z funkcji, więc musisz ją jawnie przetworzyć, tego się nie da zepsuć przypadkiem jak flow opartego na wyjątkach (wpinając catch gdzieś w połowie między źródłem a celem).
Wysyłanie eventów IMO byłoby spoko, gdyby to były jakieś peryferia aplikacji (typu właśnie z web do kafki), ale w samej logice biznesowej to mi się wydaje bad idea.
Eventy służą do informowania kogoś o czymś, mogą wychodzić z różnych źródeł, w zależności od potrzeb.
Dla mnie ma sens :D Może po prostu trzeba dobrze znać wzorce, a nie tylko o nich słyszeć kiedyś :D Joke. No offence.
No tu trochę masz racji, bo o wizytorze tylko słyszałem, sam go nigdy nie używałem, ani nawet nie widziałem, żeby ktoś używał.
Nigdy też nie pytałem na 4p jak obsługiwać wyjątki. No offence. :P
No ale to są case'y których nie da się/ciężko sprawdzić przed wywołaniem flow. To jest coś w stylu
user.buyItem("Monitor");...gdy nie wiemy ile user ma kasy i nie wiemy ile
"Monitor"kosztuje, cała ta sprawdzajka dzieje się w środku logiki biznesowej. Żeby to sprawdzić zanim się ją zawoła, to trzebaby ją zduplikować w sumie.
Logiki nie trzeba duplikować - wystarczy ją rozdzielić.Najpierw sprawdzamy, czy operacja jest w ogóle możliwa (jeśli nie, to zwracamy błąd), potem ją wykonujemy (już bez problemów, za to możemy rzucić wyjątek, skoro stał się cud i niemożliwa do wystąpienia sytuacja prześlizgnęła się przez walidację).
No tak, i takie sytuacje też są, i takie również chcę obsłużyć - tylko że inaczej dla różnych caller'ów (inaczej dla usera, dla admina i dla
crona).
To się generalnie wszystko zazębia - mniej rzucania wyjątków w aplikacji, a więcej zwracania wyników, sprawia, że nie trzeba komplikować obsługi wyjątków.