Mam problem z narysowaniem wyraźnej linii między prezentacją a warstwą aplikacji w projektowaniu opartym na domenach.
Gdzie powinny iść pliki Kontrolery, Widoki, Układy, JavaScript i CSS?
Czy jest to warstwa aplikacji czy prezentacji?
A jeśli wszystkie pójdą razem na tej samej warstwie, co zawiera ta druga? Czy to jest puste
źródło
Istnieje duża różnica między warstwą aplikacji a warstwą prezentacji z punktu widzenia DDD.
Chociaż DDD koncentruje się na tym, jak modelować domenę przy użyciu bloków konstrukcyjnych DDD i pojęć, takich jak ograniczone konteksty, wszechobecny język i tak dalej, nadal niezwykle ważne jest, aby wyraźnie zidentyfikować i oddzielić różne warstwy w aplikacji.
Architektura odgrywa dużą rolę we wdrażaniu udanej aplikacji DDD. Słynna architektura, która ostatnio zyskała wiele szumu, to architektura cebulowa:
W tym projekcie warstwa interfejsu użytkownika / prezentacji i warstwa aplikacji są wyraźnie oddzielone. Połączenie dwóch razem wprowadza ścisłe połączenie między 2 warstwami, które mają wyraźne oddzielne obawy i obowiązki.
Warstwa prezentacji powinna zawierać tylko logikę prezentacji. Unikaj inteligentnych interfejsów użytkownika, które wiedzą za dużo. Zawiera głównie kontrolery i widoki MVC oprócz CSS, JS, szablonów, formularzy i wszystkiego, co dotyczy obiektów odpowiedzi i żądań.
Działania wydane za pośrednictwem prezentacji są przekazywane do warstwy aplikacji za pomocą poleceń. Warstwa aplikacji zawiera logikę aplikacji. Zwykle jest mapowany do przypadku użycia. Zawiera CO, co powinien zrobić system, aby spełnić przypadek użycia. Typowa usługa aplikacji poprosi repozytorium o zwrócenie agregatu, a następnie wywoła akcję na tym agregacie.
Zobacz przykładowy projekt z IDDD Vaughna Vernona
źródło
entry point
icomposition root
umieszczone? Zawsze myślałem, że to odpowiedzialnośćApplication
warstwy. Ale teraz wygląda na to, że toPresentation
warstwa.Projektowanie oparte na domenie nie ma nic wspólnego z warstwą prezentacji ani warstwą aplikacji. DDD to metodologia, której głównym celem jest warstwa Domeny. Oznacza to, że DDD nie nakłada żadnych ograniczeń w odniesieniu do jakiejkolwiek innej warstwy oprócz warstwy Domeny, a Twoje pytanie może zostać zadane w kontekście dowolnej innej metodologii.
Biorąc to pod uwagę, bardzo często stosuje się architekturę czterowarstwową dla aplikacji DDD. Oto przykład jednej z takich aplikacji pokazujących warstwy i ich zamierzone zastosowanie: DDDSample Architecture . Jeśli więc wybierzesz tę architekturę, widoki i układy przejdą do warstwy Interfejsy, a kontrolery, jeśli będą niezależne od interfejsu, przejdą do warstwy aplikacji.
Równie dobrze możesz wybrać inną architekturę, ponieważ powiedziałem, że DDD nie nakłada ograniczeń. Istnieje wiele frameworków MVC, które mają różne struktury, a mimo to mogą być również wykorzystywane do aplikacji DDD. Następnie oczywiście umieściłbyś odpowiednio swoje widoki i układy.
źródło