Robię aplikację w ASP.NET MVC, używam Dappera, C# itp., chyba to mało istotne i tak.
W warstwie DAL mam klasy odpowiadające tabelom w bazie, tzw. Entites jak np.: ZamowienieEntity, ProduktEntity, KlientEntity itp.
W jednym z kontrolerow mam metode, której flow powinien wyglądać następująco:
"Gdy ktośt robi ogloszenie - jeżeli klient nie istnieje w bazie dodaje go, nastepnie dodaje jego zamowienie oraz produkty jakie zamowil"
Z grubsza w takim flow i podobnym, gdize trzeba zapisywać dane do wielu tabel widzę 2 rozwiązania:
1.)
transakcja
{
Wywoluje po kolei jakis service do sprawdzenia czy klient istnieje juz w bazie, jezeli nie tworze obiekt KlientEntity i wywoluje _klientRepository.Zapisz()
Nastepnie wyznaczam/obliczam produkty jakie zamowil, tworze produty entity i wywoluje _produktyRepository.Zapisz() dla kazdego z nich.
Nastepnie wyliczam zamowienie, robie jakies biznesowe obliczenia etc., jak wszystko bedzie tworze ZamowienieEntity i zapisuje uzywajac kolejnego repo
transakcja.Commit
}
2.)
tworze sobie jakis obiekt dto z polami Klient, Produkty, Zamowienie
wywoluje service do wyznaczenia klienta i uzupelniam nim pole w dto
wywoluje service do wyyznaczenia produktow, uzupelniam nimi pole w dto
wywoluje service do wyznaczanie/obliczenia zamowienia, uzupelniam nim pole w dto
Mając tak wsyzstko wyznaczone/obliczone otwieram transakcje i po kolei wywoluje wszystkie repa i zapisuje co obliczylem:
transakcja
{
_klientRepository.Zapisz(dto.Klient)
_klientRepository.Zapisz(dto.Produkt)
_klientRepository.Zapisz(dto.Zamowienie)
transakcja.Commit
}
Puenta.
Tak naprawde wszystko zmierza do pytania czy powinienem zapisywac poszczegole obiekty sukcesywnie jak je wyliczam, czy pierw wszystko obliczyc/wyznaczyc i na sam koniec po kolei wszystko zapisywac?