Jak korzystać z dbContextu w serwisach

0

Witam ponownie ;)

Mam krótkie pytanie. Chodzi o moją aplikację WPF. Podział mam taki, że mam widok, do tego podpięte ViewModele, które operują na serwisach, które to mogą korzystać z innych serwisów oraz korzystają z bazy danych bezpośrednio poprzez Linq na dbcontext. Moje pytanie polega na tym, jak tworzyć obiekty dbContextu dla tych serwisów? Zazwyczaj robiłem to tak, że w serwisie był on jako pole:

private SmContext db = new SmContext();

Jednak, ostatnio przy Code Analysis wywaliło mi z tej okazji CA2202. Szukam propozycji (nie mam zbytniego doświadczenia) jeśli chodzi o skorzystanie z db contextu. Myślałem nad użyciem using w każdej metodzie serwisu, myślałem nad wstrzykiwaniem z kontenera...

Drugie pytanie, dzisiaj przeczytałem w jednym z wątków jak @somekind zwraca uwagę, aby w ViewModelu nie było sporo serwisów, gdyż burzy to SRP ViewModelu. Jak mógłbym to u siebie zorganizować, gdyż jeden z moich ViewModeli ma przekazywanych 5 serwisów w konstruktorze. Chodzi o to, że mam okno z dodawaniem nowej naprawy, jednak mam tam np. comboboxa z listą dostępnych statusów napraw do wyboru, no i z tej okazji w konstruktorze przypisuję do bindowanej property listę tych statusów korzystając z serwisu RepairStatusesService wywołując metodę GetAll. Podobnie jeśli chodzi o przypisanie serwisanta do naprawy. Mam wywołanie metody z klasy UsersService. I tak dalej. Jak można to ogarnąć? Mam zrobić jakiś serwis typu unit of work dla dodawania naprawy?

1

Drugie pytanie, dzisiaj przeczytałem w jednym z wątków jak @somekind zwraca uwagę, aby w ViewModelu nie było sporo serwisów, gdyż burzy to SRP ViewModelu. Jak mógłbym to u siebie zorganizować, gdyż jeden z moich ViewModeli ma przekazywanych 5 serwisów w konstruktorze.

Ja (prawie) zawsze polecam stosować wzorzec mediator, a konkretnie skorzystać z niego za pomocą biblioteki MediatR. Oddzielasz polecenia/zapytania i handlery dla nich, w Controller/ViewModel wstrzykujesz obiekt IMediator i jedyne co Cie interesuje to wysłanie jakiejś komendy. Cała obróbka a co za tym idzie skorzystanie z serwisów zajmuje się handler.

https://github.com/jbogard/MediatR

0

Dzięki @Aventus za nakierowanie. Faktycznie w tym wątku, o którym pisałem został wspomniany mediator. Muszę tylko trochę doczytać, bo na obecną chwilę ciężko mi to połączyć z moim problemem, nie dlatego, że to zły pomysł, tylko dlatego, że jeszcze nie wiem jak ;)

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