Konfiguracja warstw projektu

0

Piszę sobie nową aplikacje. Podzieliłem ją na trzy warstwy: Data Access - zawiera context, repozytoria, EF; Domain - modele, interfejsy repozytoriów, serwisy i ich repozytoria; WebUI - kontrolery, widoki i modele widoku. Zależności w projekcie to DataAccess --> Domain <-- WebUI.
Wykorzystuje w tym projekcie bibliotekę Identity. Model użytkownika dziedziczący po IdentityUser umieściłem w warstwie Domain, zostawiłem tam jednak również ApplicationDbContext dziedziczący po IdentityDbContext. Dostęp do bazy danych jednak miał być w warstwie DataAccess. Dlatego Utworzyłem nowy DbContext, który nazwałem StoreDbContext dziedziczy on po ApplicationDbContext. Konfiguracja Identity znajduje się w warstwie Domain. Takie rozwiązanie jest akceptowalne? Czy całkowicie niedopuszczalne?
Mój drugi problem to konfiguracja kontenera DI. Umieszczając go w warstwie WebUI musiałbym dodać do tej warstwy referencje do warstwy DataAccess. Po to utworzyłem warstwę pośrednią - Domain - aby tego jednak uniknąć. Więc takie rozwiązanie odpada. Umieścić w Domain nie mogę ze względu na to, że ta warstwa "nie widzi" innych warstw. Jedynie w DataAccess mógłbym to zrobić. Jednak jest to warstwa dostępu do danych, a nie miejsce na konfigurację DI. Powinienem utworzyć nową warstwę Infrastructure, w której umieszczę konfigurację DI? Taka warstwa by musiała mieć dostęp do wszystkich pozostałych warstw.

2

DI, podobnie jak Identity do Infrastructure.
Żadnych DbContext w Domian. Domain ma być niezależny od technologii.

0

Skoro Domain ma być niezależny od technologii, to model User (dziedziczący po IdentityUser) również nie powinien znaleźć się w Domain. Mam taki model umieścić w Infrastrukture? Umieszczając Identity w Infrastrukture uniemożliwi mi to utworzenie serwisu do logowania i rejestracji użytkownika w Domain. Chyba, że to też ma być w Infrastrukture? Skoro ma być niezależny to chyba tak. Albo może w WebUI?

1

A czy logowanie i rejestrowanie użytkowników to domenna biznesowa Twojej aplikacji? Jeśli nie, to czemu dawać to do Domain?

0

No dobra to było głupie pytanie. Chodzi mi o to by usunąć to z kontrolera Account. Bo wydaje mi się, że w kontrolerze to nie powinno się znaleźć.
Co z tym modelem User powinienem zrobić? Zostawić w Domain, czy przenieść?

1

Moim zdaniem, to wszystko co związane z identity (model User, jakieś interfejsy typu IUserContext) trzeba dać do Infrastructure, oprócz może ostatecznej implementacji, która pewno jest zależna od weba.

0

Problem polega na tym, że w Infrastructure znajduje się również DI. Wymusza to na Infrastructure dodanie zależności do pozostałych projektów. Uniemożliwia do dodanie referencji z DataAccess do Infrastructure. W DataAccess znajduje się context, który dziedziczy po IdentityDbContext<User>.

0

No to może jednak DI (czymkolwiek u Ciebie jest) trzeba przenieść do innego projektu/modułu? Ja bym je trzymał tam, gdzie punkt startowy aplikacji, no ale nie twierdzę, że to idealne podejście. Jeśli potrzebujesz coś gdzieś umieścić i nie masz na to jeszcze miejsca, to po prostu utwórz nowy moduł.

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