Witam!
W aplikacji o strukturze wzorowanej na MVC mamy 2 klasy modelu A i B:
1. klasa A posiada metode wykonujaca skomplikowana operacje na bazie danych, skladajaca sie z wielu zapytan, ktore musza byc objete transakcja.
2. metoda klasy B wykonuje cos tam innego w bazie danych
Klasy kontrolerow akcji korzystaja z klas A i B.
Obie klasy i ich metody dotycza niezaleznych elementow serwisu i moga byc wywolywane oddzielnie.
Ale nagle okazuje sie, ze w pewnych przypadkach wykonanie obu operacji jedna po drugiej stanowi logiczna calosc: wykonywana akcja wymaga, aby wywolac metode klasy A, a nastepnie metode klasy B. Pytanie: jak objac pojedyncza transakcja obydwie operacje?
I teraz mamy rozne rozwiazania:
1. Klasa kontrolera akcji wywoluje najpierw metode klasy A a potem klasy B. W tym przypadku transakcja jest objeta tylko pierwsza operacja. Jesli klasa B nie bedzie w stanie wykonac operacji, to stan bazy bedzie nieprawidlowy, bo zmany spowodowane przez klase A nie beda uwzglednione w obszarze kontrolowanym przez klase B. Niefajnie.
2. Klasa kontrolera akcji wywoluje metode klasy A, a ta z kolei korzysta z klasy B. Ale teraz klasa A zaczyna byc zbytnio zalezna od klasy B. A co sie stanie, jesli operacje wewnatrz B rowniez beda objete transakcja? Tez niefajnie...
Macie inne pomysly? Jak zarzadzac transakcjami rozciagnietymi na rozne klasy, z ktorych kazda rowniez moze wymagac zdefiniowania transakcji w swoim wnetrzu?