Kiedy po raz pierwszy dowiedziałem się o Domain Driven Design, zapoznałem się również z repozytorium i wzorcami jednostek pracy, które kiedyś wydawały się być na najwyższym poziomie dla fajnych dzieciaków, które rzucały zapytania SQL, takie jak jaskiniowcy, na bazy danych. Im bardziej zagłębiłem się w ten temat, tym bardziej dowiedziałem się, że nie wydają się one już konieczne z powodu ORM, takich jak EF i NHibernate, które implementują zarówno jednostkę pracy, jak i repozytoria w jednym interfejsie API, zwanym sesją lub kontekstem.
Teraz nie jestem pewien, co robić. Do repozytorium lub nie do repozytorium. Naprawdę rozumiem argument, że takie nieszczelne abstrakcje tylko nadmiernie komplikują rzeczy, dodając absolutnie nic, co mogłoby uprościć dostęp do danych, jednak nie wydaje się słuszne łączenie każdego możliwego aspektu mojej aplikacji np. Z Entity Framework . Zazwyczaj przestrzegam kilku prostych wskazówek:
- Warstwa domenowa jest sercem systemu, zawierającym podmioty, usługi, repozytoria ...
- Warstwa infrastruktury zapewnia implementacje interfejsów domenowych związanych z infrastrukturą, np. Plik, baza danych, protokoły.
- Warstwa aplikacji zawiera katalog główny kompozycji, który porządkuje i porządkuje wszystko.
Moje rozwiązania zwykle wyglądają tak:
Domain.Module1
Domain.Module2
IModule2Repo
IModule2Service
Module2
Infrastructure.Persistence
Repositories
EntityFrameworkRepositoryBase
MyApp
Boostrapper
-> inject EntityFrameworkRepositoryBase into IRepository etc.
Utrzymuję moją warstwę domeny w czystości, używając IRepository<'T>
również domeny, która nie zależy od niczego innego, co mówi mi, jak uzyskać dostęp do danych. Gdybym teraz dokonał konkretnej implementacji, IModule2Service
która wymaga dostępu do danych, musiałbym wstrzyknąć, DbContext
a przez to połączyć ją bezpośrednio z warstwą infrastruktury. ( Wchodząc do projektu Visual Studio, może to okazać się bardzo trudne z powodu zależności cyklicznych! )
Dodatkowo Co może być alternatywą dla depozytów i fukktonów dzieł ? CQRS? Jak można wyodrębnić ramy czysto infrastrukturalne?