Szykuję się do nowego projektu, jakiegoś nieprzesadnie skomplikowanego forumowego CMSa w ASP.NET MVC i jestem na etapie organizacji projektów. Dotychczas wszystko zawierałem w jednym wielkim projekcie-matce i ewentualnie drugim z testami, niemniej jednak do CV juniora przydałoby się coś lepszego...
Więc forumowy CMS byłby oparty na następujących projektach (strzałki oznaczają referencje do danego projektu):
-
Infrastructure - rejestrowanie zależności dla DI, inicjalizacja bazy danych (w tym klasy z konfiguracjami Fluent API), logger, mapper
-> Domain -
App.Web - zwykły projekt ASP.NET MVC
-> App.Services
-> Infrastructure -
App.Services - serwisy aplikacji, czyli albo odpowiedzialne za operacje ściśle webowe (typu odczyt pliku itp.) nienadające się na serwisy domenowe, albo wrappery na serwisy domene by kontrolery były jak najchudsze, dzięki czemu będzie można w banalny sposób wymienić je np. na WebAPI. Zawierają także ViewModele.
-> Domain.Services -
Domain.Services - serwisy operujące bezpośrednio na DbContextach i DbSetach (bez jako takich oddzielnych repozytoriów), a także obiekty DTO.
-> Domain -
Domain - wszystkie klasy POCO dla Entity Frameworka.
Przepływ wyglądałby następująco:
View (z jakimś wstrzykniętym ViewModelem) -> Controller (ViewModel) -> Serwis aplikacyjny (ViewModel na DTO) -> Serwis domenowy (DTO na POCO) -> DbContext
I w drugą stronę podobnie.
Teraz sekcja pytań:
-
Czy taki podział ma sens? Wzoruję się na artykułach omawiających Onion Architecture, z drugiej strony nie chcę iść w DDD bo uważam że to trochę overkill dla forum które ma być projektem na GitHuba do pokazania, a nie konkurentem Coyote.
-
W przypadku gdy nie chcę korzystać z jakichś własnych repozytoriów, a bezpośrednio wstrzykiwać DbContext czy tam DbSety, potrzebuję referencję do paczki EFa w dwóch projektach: Infrastructure (inicjalizacja, tu też byłyby implementacje repozytoriów gdyby... były :P) oraz właśnie w Domain.Services (gdzie gdybym wstrzykiwał własne repozytoria to dałoby się tego uniknąć). Rozumiem że ORMa raczej nigdy się nie zmienia, ale mimo wszystko nie wiem czy to nie zapowiedź jakichś problemów.