Observery zamiennik

W związku z tym że observery są deprecated i wyodrębnione do gema w rails 4 jakie zamienniki proponujecie ? Najlepiej bez ingerencji w istniejące modele, czyli odpadają np services.

Jeśli potrzebujesz takiej funkcjonalności, to po prostu użyj tego gema.

Mógłbyś rozwinąć? Jak dla mnie serwisy powinny być wrapperami na modele i nie ingerować w nie…

miałem na myśli Service Objects, coś jak tutaj http://stevelorek.com/service-objects.html

No właśnie, ja tam ingerencji w model nie widzę :slight_smile: Obiekt serwisu opakowuje obiekt modelu, używając jego metod i dodając własną funkcjonalność.

W poprzednim temacie to już napisałem, ale powtórzę jeszcze raz. Observery w railsach nie są deprecated, po prostu nie są już częścią rails core. Observery i services to 2 zupełnie różne wzorce projektowe, więc to nawet nie jest zamiennik.

Ok, wydawało mi się że są. Czy są jakieś korzyści w takim razie z zamiany observerów np na after_create w modelach ? Np przy testowaniu ?

Zamiana observerów na callbacki to zły pomysł. Callbacki z natury są ciężkie do testowania :slight_smile:

samo testowanie callbacków nie jest trudne, wywołujesz

object.run_callbacks(:after_save)

pomijając oczywiście odtworzenie całej otoczki do testów, ale to trzeba zrobić w każdym tescie.

Observery działają jak callbacki, ale do observerów ładuje się coś co nie ma bezpośredniego związku z obiektem, np. wysyłanie maili itp. To że coś zostało wyrzucone do osobnej biblioteki (gema) nie oznacza od razu że to zło.

W skrócie tak jak napisał wafcio, masz po prostu kod w innym miejscu, działa to praktycznie tak samo. Ja osobiście nie lubię observerów, więc nie stosowałem ich za bardzo nawet jak były w rails core, ale jeżeli potrzebujesz szybko dodać coś do modeli, np. dodawanie do logów, to czasami mogą się przydać.

Ja osobiście staram się unikać nadmiernego używania callbacków w modelach (czy to przez after_/before_ czy przez observery), ale nie używam do tego żadnych gemów - po prostu inaczej układam kod.

Btw, trochę ostro napisałem to powyżej - sorry, byłem pewien, że to Ty pisałeś w innym wątku o tych observerach.

Właśnie też pamiętam że niektórzy nie przepadają za observerami, ale nie wiem z jakich konkretnie powodów.

Po przekroczeniu pewnego poziomu złożoności szukanie po wszystkich klasach “co mogło wywołać ten kod / zmienić ten stan” robi się strasznie upierdliwe.