Pipeline pattern - gdzie najlepiej wstawić walidator?

0

Cześć
proces jest taki

  • jest n formatów wejściowych
  • każdy z takich formatów jest konwertowany na obiekt, bedący wspólnym mianownikiem dla tych formatów
  • z tego obiektu jest tworzony format wyjściowy

Konwersja z formatu żródłowego do "wspólnego mianownika" zawsze się udaje, pod tym względem, że zostaje uwtorzony obiekt, on jest uzupełniany danymi, ale na wyjściu jakiś obiekt jest zawsze

Obiekt pośredni może być z punktu widzenia procesu niewłaściwy i trzeba to sprawdzić

mamy takie coś
plik->obiekt_posredni|obiekt_posredni->plik_wynikowy

i teraz gdzie lepiej wstawić walidator, pod koniec pierwszego etapu, czy na początku drugiego, czy jako osobny krok?

1

Według mnie, to ogólnie coś takiego jak walidator sprawdza różne sfery:

  • dane wejściowe - być może użytkownik bądź inny system wprowadził złe dane
  • stan systemu - być może user/system wprowadził poprawny id, np 5, ale po odpowiednim przemapowaniu okazało się, że obiekt o id 5 nie może być tutaj użyty
  • uprawnienia - w tym wypadku raczej nie ma sensu

Także ja bym walidator danych wejściowych dał na początku (pod koniec pierwszego etapu), natomiast później, w kolejnych krokach mapowania/parsowania/kolejnego pliku pośredniego, nadal jest możliwe że te kroki pośrednie coś zepsuły, więc na koniec ostatniego etapu też bym dał taki walidator sensu biznesowego.

A czy to będzie połączone z jakimś krokiem pośrednim, czy też osobny krok, to jak dla mnie nie ma większego znaczenia.

0

To zależy, co walidujesz. Jeśli obiekty wynikowe mają różne niezmienniki... Np ObiektWynA musi mieć X, a ObiektWynA musi mieć Y to tam musisz walidować, bo mają różne "potrzeby". Jeśli za to, i tak pewnie jest tutaj, to ObiektPośredni ma być zawsze poprawny, to walidacje bym dał w nim, lub przed jego utworzeniem. W zależności jaka to walidacja, ale zadbałbym o to, że jak już mam obiekt pośredni to on jest zawsze poprawny. I od tego momentu w pipelinie mogę 'spać spokojnie'. Warto oczywiście dopisać do tego i tak testy dla każdego wynikowego jak by co.
Jeśli to jakaś skomplikowana walidacja i jakieś guardy w konstruktorze nie wystarczą, oraz jak musisz walidować różne rzeczy dla różnych wejść, to walidatory powinny działać przed utworzeniem ObiektuPośredniego. Tutaj też nie wiem gdzie, czy i jak zwracasz wynik walidacji, ale to osobna kwestia i można ją załatwić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1