ORM a architektura aplikacji

0

W jaki sposób w aplikacji MVC warstwa logiki biznesowej powinna komunikować się z warstwą dostępu do danych, która to używa jakiegoś ORMa?

Możemy w logice biznesowej utworzyć instancję kontekstu ORMa i jej używać, ale wtedy wiążemy BLL z frameworkiem, a opakowanie ORMa w repozytorium też jest złe.

1

W kontrolerze wstrzykujesz serwis który korzysta z ORM lub stosujesz wzorzec mediator z wykorzystaniem biblioteki MediatR albo podobnej: https://github.com/jbogard/MediatR.

Co do repozytoriow- nie widzę nic złego w wyabstrachowaniu konkretnej implementacji dostępu do danych (czyli ORM w postaci EF, NHibernate czy cokolwiek innego) natomiast jest to kwestia preferencji. Są fanatycy którzy będą chcieli za wszelką cenę Ci to wyperswadować, ja natomiast uważam że są ważniejsze rzeczy niż wojny o "słuszniejszą rację".

Jeśli zdecydujesz się na użycie wzorca repozytorium to warto również zastosować również wzorzec specification: https://enterprisecraftsmanship.com/2016/02/08/specification-pattern-c-implementation/. No ale do prostych aplikacji to raczej przerost formy nad treścią.

EDIT: Najprostszym wyjściem będzie wstrzykiwanie serwisów które będą korzystały z obiektu ORM (który też powinien być wstrzykniety). Natomiast proponuję przyjrzeć się w/w wzorcowi mediator bo moim zdaniem jest to lepsze rozwiązanie jako że zabiera w zasadzie cała logikę z kontrolerów.

1
panDawid napisał(a):

W jaki sposób w aplikacji MVC warstwa logiki biznesowej powinna komunikować się z warstwą dostępu do danych, która to używa jakiegoś ORMa?

Możemy w logice biznesowej utworzyć instancję kontekstu ORMa i jej używać, ale wtedy wiążemy BLL z frameworkiem, a opakowanie ORMa w repozytorium też jest złe.

A czy Repository to opakowanie na ORM? Chyba nie. ;#

Jak chcesz mieć możliwość przeniesienia logiki "biznesowej" niezależnie od ORM to chowasz to za "abstrakcją".

0

W kontrolerze wstrzykujesz serwis który korzysta z ORM

Wtedy ten serwis będzie takim repozytorium, albo czymś podobnym.

A czy Repository to opakowanie na ORM?

Nie, ale często repozytorium wykorzystuje się do opakowania ORMa, co nie jest zgodne z jego ideą.

Myślałem że może istnieje jakieś nieskazitelne rozwiązanie :) Z dwojga złego już chyba lepiej jak BLL będzie korzystać z kontekstu ORMa, ale zainteresuję się jeszcze tym wzorcem mediator.

0
panDawid napisał(a):

W kontrolerze wstrzykujesz serwis który korzysta z ORM

Wtedy ten serwis będzie takim repozytorium, albo czymś podobnym.

Wtedy ten serwis bedzie serwisem korzystajcym z repozytorium, ORMa czy czegokolwiek innego.

Myślałem że może istnieje jakieś nieskazitelne rozwiązanie :)

Nieskazitelne rozwiazanie w programowaniu? Takie istnieje tylko dla fanatykow ;)

1
panDawid napisał(a):

Wtedy ten serwis będzie takim repozytorium, albo czymś podobnym.

Nie, bo serwis będzie realizował logikę. Nie piszesz przecież logiki biznesowej w repozytoriach, prawda?

Nie, ale często repozytorium wykorzystuje się do opakowania ORMa, co nie jest zgodne z jego ideą.

Nie, to że tam jest jakiś ORM wewnątrz, to tylko szczegół implementacji.

0
somekind napisał(a):
panDawid napisał(a):

Wtedy ten serwis będzie takim repozytorium, albo czymś podobnym.

Nie, bo serwis będzie realizował logikę. Nie piszesz przecież logiki biznesowej w repozytoriach, prawda?

Prawda, moja pomyłka.

somekind napisał(a):
panDawid napisał(a):

Nie, ale często repozytorium wykorzystuje się do opakowania ORMa, co nie jest zgodne z jego ideą.

Nie, to że tam jest jakiś ORM wewnątrz, to tylko szczegół implementacji.

Sam pisałeś, że nie powinno się stosować repozytorium z ORMem w środku.

0
panDawid napisał(a):

Sam pisałeś, że nie powinno się stosować repozytorium z ORMem w środku.

Na pewno nie ja. Ja mogłem co najwyżej pisać, żeby nie pisać repozytoriów, które nie są repozytoriami tylko wrapperami na ORM.

0

Faktycznie. Przeczytałem jeszcze raz Twój artykuł o repozytoriach, tak więc cofam to co napisałem.

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