Buduję .NET 4.5 C # Web API RESTful rozwiązanie i chciałbym, aby ktoś mi powiedział, czy moje rozwiązanie projektu jest poprawne i / lub mądre (-wystarczy?) Dla rozwiązania zaprojektowanego przy użyciu Domain Driven Design, proszę.
Rozwiązanie zostało podzielone na 6 projektów:
- /Baza
(Niczego nie ma)
Projekt internetowy stanowi interfejs między rozwiązaniem a światem zewnętrznym. Zawiera kontrolery Web API. Nie zawiera prawie żadnej logiki poza zbieraniem wartości z obiektów żądania i proszeniem warstwy BizApi o pracę.
- /Biz.Api
(Referenced by Base])
Zapewnia usługi domenowe i umożliwia projektowi interfejsu / Base dostęp do obiektów logiki biznesowej domeny w projekcie /Biz.Domain.
- /Biz.Domain
(Odwołany przez Biz.Api)
Udostępnia klasy domen dla warstwy Biz.Api. Zapewniają one metody manipulowania danymi firmy w pamięci.
- /Dal.Db
(Odwołany przez Biz.Api)
Warstwa repozytorium bazy danych. Dostęp do baz danych i map zwróconych danych do wewnętrznych DTO zdefiniowanych w warstwie / Interfejsy.
- /Dal.Services
(Odwołany przez Biz.Api)
Zapewnia warstwę proxy do zewnętrznych zależności, takich jak usługi sieciowe, i odwzorowuje ich zwrócone dane na wewnętrzne DTO zdefiniowane w projekcie / Interfaces.
- / Interfejsy
(Odwołanie w większości projektów powyżej)
Zawiera klasy DTO do przesyłania danych wokół rozwiązania oraz interfejsy C # do definiowania umów na rzeczy takie jak IoC.
źródło
Odpowiedzi:
Ta struktura folderów została zainspirowana słynną książką projektową Vaugh Vernon opartą na domenie Implementing .
Rozwiązanie:
├ WebService (REST Usługi rezydują tutaj)
├ WebServiceTests
├ aplikacji (Application Services rezydują tutaj)
├ ApplicationTests
├ Domain (Podmioty, VO, usługi domenowe, fabryki domen, specyfikacje, imprezy domen, interfejsy Przechowalnie, infrastruktura usługi interfejsy)
├ DomainTests
├ Infrastruktura (repozytoria, usługi infrastrukturalne, adaptery do usług zewnętrznych)
└ Testy infrastruktury
Zaczynam od Rozwiązania, następnie tworzę cztery projekty dla każdej warstwy w mojej aplikacji, a następnie kolejne cztery projekty dla każdej warstwy testowej.
Nie twórz folderów
interfaces
aniservices
w swojej warstwie domeny, zamiast tego pokrewne klasy powinny być pogrupowane według funkcji w modułach.źródło
Jeśli chodzi o strukturę, wydaje mi się to w porządku, chociaż wymyśliłbym inne, bardziej samoopisujące nazwy, takie jak
"YourProjectWebApi"
zamiast"Base"
,"Dal.External"
zamiast"Dal.Services"
i tak dalej.W części „wewnętrzny DTO” może wyczuć zapach, ponieważ powinieneś wydobywać jednostki z repozytoriów i móc bezpośrednio na nich podejmować działania domenowe (biznesowe). Podmioty to nie tylko DTO.
W pewnym sensie czerpię z faktu, że
Dal.Db
nie ma zależności odBiz.Domain,
tego, że warstwa domeny wykonuje pewne mapowanie między DTO z projektu Interfejsy (zwrócone przez repozytoria?) A własnymi obiektami domeny. Nie byłoby to poprawne w typowej najnowocześniejszej (== „cebulowej” lub „heksagonalnej”) architekturze DDD - warstwa domeny nie powinna odwoływać się do innych projektów. Z tego samego powodu interfejsy repozytorium powinny być deklarowane w domenie, a nie w,Interfaces
jak sądzę, są.źródło