Prezentacja VS Warstwa aplikacji w DDD

9

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

Matthieu Napoli
źródło

Odpowiedzi:

7

To, że ktoś utworzył i nazwał „Warstwa aplikacji” i „Warstwa prezentacji”, nie oznacza, że ​​aplikacja powinna je mieć. Powinieneś tworzyć warstwy PO utworzeniu znacznej ilości kodu, który zgrupowałeś razem i chcesz nazwać tę grupę ze względu na komunikację między programistami i przejrzystość kodu.

Z punktu DDD. Warstwa aplikacji to wszystko, co nie jest warstwą domeny. Który obejmuje logikę aplikacji, prezentację i usługi aplikacji.

Euforyk
źródło
2
Dziękuję, w rzeczy samej uświadomiłeś mi, że w moim przypadku oddzielenie aplikacji i prezentacji jest bezużyteczne. Najpierw prostota!
Matthieu Napoli
Jeśli DDD ma interfejs API REST zamiast interfejsu użytkownika w warstwie prezentacji, interfejs API REST byłby warstwą aplikacji lub prezentacji. Jestem teraz zmieszany, ponieważ byłem pewien, że REST API jest warstwą prezentacji ..
Dario Granich
8
W rzeczywistości DDD określa cztery warstwy w następującej kolejności, od wyższych do niższych: Prezentacja, Aplikacja, Domena, Infrastruktura. Zatem warstwa aplikacji nie obejmuje „prezentacji”. Zawsze dobrze jest decydować o warstwach przed napisaniem znacznej ilości kodu, ponieważ nie chodzi tylko o grupowanie kodu razem, ale także o ograniczenie kierunku zależności kompilacji w czasie.
Rogério
11

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:

wprowadź opis zdjęcia tutaj

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

Songo
źródło
2
+1. W ten sposób zrealizowałem mój projekt. Od razu udało mi się to osiągnąć. Od czasu abstrakcji do warstwy aplikacji mogłem mieć wiele warstw prezentacji. Na przykład nasz interfejs API i nasza strona internetowa zużywają warstwę aplikacji, która oszczędza dużo czasu i duplikuje kod, ponieważ moja aplikacja internetowa nie musi ramkować wiadomości do i z interfejsu API i utrzymuje całą logikę w synchronizacji pomiędzy dwoma.
Sinaesthetic
Gdzie są entry pointi composition rootumieszczone? Zawsze myślałem, że to odpowiedzialność Applicationwarstwy. Ale teraz wygląda na to, że to Presentationwarstwa.
Denis535
2

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.

zafarkhaja
źródło