Jaki pattern użyć do wieloetapowego zadania?

0

pisze logikę w której jest jakis proces i ma on pare etapów:

  1. najpierw zrob to
  2. potem zrob tamto
  3. itd..

chcialbym osiągnąc taki efekt, że jeśli jeden z etapów zawiedzie, następne sie nie wykonają (we wszystkich lub w ew. w niektorych z tych etapów)
możecie mi zaproponowac jakis pattern albo podejscie do tego?

próbuje zaadoptować do tego responsibility chain tylko tak srednio to idzie, bo przeszedlem juz przez wiele problemów które jakos-tam rozwiązałem, a na końcu nie osiągnąłem w sumie wiele więcej niż jakbym logikę po kolei wrzucił w jedną metodę i użył paru ifów..
plus tego taki ze mam mniejsze klasy/metody
minus tego taki, ze mam bardzo duzo klas (kazdy etap to osobna klasa, nawet jesli to podobna operacja na bazie typu zmiana wartosci 1 pola, musze zachowac ciało metody w klasie Etap i nie moge przekazac sobie byle-jakiego parametru)

to dobrze mieć dużo, małych, BARDZO konkretną rzecz robiących klas, które uczestnicza we flow jakiegos procesu?
ładnie to wygląda, ale nie wiem czy nie za duzo boilerplatu

1

Wzorzec komendy (command).

0

@margor90 thx, próbuje tu go dopasować do potrzeb i mam z tego powodu pytanie
Zakladajac ze mamy interfejs Command i metode execute():
powiedzcie mi, według was jest w porządku pisanie krótkich, nie "zgeneralizowanych" klas jako implementacji commendy?
Tzn np. CheckUserExistsCommand zamiast ogólnego DatabaseCommand albo SetStatusDoneCommand + SetStatusAvailableCommand zamiast ogólnego SetOrderStatusCommand?

tak defacto uzycie commanda zmieni tyle ze wywolywanie metody execute mam nijako wyjęte na zewnątrz, wiec moglbym lapac np jakis OrderException w wypadku błędu podczas ktoregos z etapów
(btw. jak ktoras command'a sie nie powiedzie to jak jeszcze proponujecie poinformować Clienta o tym ze miala blad?)

0

Do informowania o błędach obserwator.

1

Możesz też użyć maszyny stanów.

0

jak są to operacje na bazie to nie możesz napisać normalnie i po prostu opanować to w transakcję?

0

Nie wciskaj wszędzie wzorców, de facto wzorzec chain of responsibility pasuje (komenda nie pasuje - jej przeznaczenie jest troche inne) do twojego problemu - prawdopodobnie, ale informowanie o błędach w postaci wyjątków niekontrolowanych jest git, do tego one służą.

0

Ale lepiej opisz swój problem, żeby na pewno dobrze dopasować rozwiązanie do problemu

0

Jak napisałem wyżej. Podejście z maszyną stanów mi się podoba.

Nie jestem pewien co do chain of responsibility - przecież jego idea to przepuszczenie żądanie przez poszczegolne ogniwa, aż znajdzie się takie, które je obsłuży. Pozostałe nic nie robią.
Tutaj idealne jest stworzenie stanów, vide: jesteśmy w stanie n, robimy wymagane dla tego stanu operacje -> stan się zmienił na inny.

0

Możesz spróbować work flow, używałem http://www.jbpm.org jest darmowe i dobre.
Pozdro

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