a.....e
a.....e
#ddd #oop #java #programowanie #hexagonalnaarchitektura

Jak mam se domenę, obiekty o znaczeniu biznesowym, które coś se robią, bez używania zewnętrznych rzeczy i mam adaptery, które potrafią np. przekonwertować obiekt domenowy do xml albo na dto albo wyciągnąć obiekt domenowy z bazy to teraz jak to połączyć? Prawidłowe będzie gdy:
stworzę se service, który będzie używał obiektów domenowych i adapterów (zdefiniowanych jako abstrakcji)?
Gdzie umieścić taki serwis? W pakiecie domain czy adapters? A może osobno?

A może to obiekt domenowy powinien używać se adapterów przez abstrakcję, a nie że serwajs jakiś?
1
  • Najlepsze
  • Wszystkie komentarze
taktojes
taktojes
@aczutuse: trudnosci te dzawy
1
PaaD
no to do jsona


@aczutuse: I to jest właśnie zarąbiste w tej architekturze, że samo serce aplikacji nie jest zaśmiecone szczegółami technicznymi integracji z innymi usługami. Polecam przy tym tak samo potraktować bazę danych - jako jedną z opcji integracji, do której wystawiamy adaptery - nieźle rozwiązuje to pokusę pomieszania klas encji z agregatem domeny.

A odpowiadając na pytanie - pakowałbym to do adapters, bo IMHO to adaptery mają wiedzieć
1
markaron
@aczutuse:

a mapper, który mapuje obiekt domenowy na dto? W pakiecie web gdzie jest RestController? Czy do adapterów? A może do domeny, bo to trochę logika biznesowa pt. "jak prezentować nasz obiekt"?


to szczegół implementacyjny/util więc poza domeną - po co domena ma wiedzieć cokolwiek o warstwie
1
markaron
----TutajSerwajs.java

Czemu serwajs jest w warstwie infrastruktury nie aplikacji? Zwykle serwisy aplikacyjne odpowiedzialne za wykonanie jakiegoś use case'a jak nazwa mówi siedzą w warstwie aplikacji, chyba że to jakiś inny serwis, nie wiem. Zwykle jest tak, że web controller woła serwis aplikacyjny albo handler jak używasz CQRS i ten serwis/handler zajmuje się orkiestracją obiektów domenowych. Czyli pobiera agregat z bazy danych wykonuje logikę, zapisuje stan agregatu za pomocą repozytorium i jak trzeba to
1
markaron
@aczutuse: Jeśli w twoim przypadku umieścisz DTO w web, który jest częścią infrastruktury, to w jaki sposób serwis aplikacyjny który nie powinien mieć referencji do komponentów będących częścią warstwy infrastruktury będzie na nich operował? Nie możesz mieć sytuacji w której pakiet web ma referencję do application i jednoczesnie application ma referencję do web.

Jeśli serwis operuje na DTO i jednocześnie jest wywoływany w kontrolerze to DTO muszą siedzieć w
1
markaron
@aczutuse: Infra bo to jest szczegół implementacyjny. Dziś używasz wbudowanych Springowych komponentów, a jutro możesz chcieć użyć dedykowanej zewnętrznej biblioteki, a po jutrze będziesz chciał odpalać job-a poza procesem aplikacji żeby mieć pewność, że jak padnie aplikacja to job będzie sobie dalej działał.

Co do osobnego pakietu to zależy od skali i struktury projektu. Ja preferuję mieć osobne pakiety. Czyli mam pakiet z adapterami do bazy danych, pakiet z adapterami
1
nad__czlowiek
przekonwertować obiekt domenowy do xml


@aczutuse: ( ͡° ʖ̯ ͡°) ale zaśmierdziało legacy
0
a.....e
a.....e
@nad__czlowiek: no to do jsona
0
a.....e
a.....e
@taktojes: tu se
0
markaron
@aczutuse: Odpowiedź jest prosta. Czy jest to część twojej domeny biznesowej to znaczy czy jest czymś unikalnym i stanowi o wartości/przewadze biznesową nad konkurencją, czy jest zwykłym szczegółem technicznym/implementacyjnym? Jeśli to pierwsze to powinno być częścią domeny. Jeśli to drugie to powinno być częścią warstwy infrastruktury.

Przykładowo jeśli twoja firma zajmuje się dostarczaniem rozwiązań do parsowania xml-i, json-ów, csv-ów itd to obiekty wykonujące taką logikę są w rozumieniu DDD dziedziną
0
a.....e
a.....e
@PaaD: a mapper, który mapuje obiekt domenowy na dto? W pakiecie web gdzie jest RestController? Czy do adapterów? A może do domeny, bo to trochę logika biznesowa pt. "jak prezentować nasz obiekt"?
0
a.....e
a.....e
@markaron: popacz wyżej se... Ja słyszałem se, że jak ktoś robi pakiet utils to jest złym programistą ech
0
a.....e
a.....e
@markaron: @PaaD a Exceptiony dzie se dać, które używają adaptery? Mogem zrobić pakiet exception i wyciagnac go na wierzch?
0
PaaD
W pakiecie web gdzie jest RestController?


@aczutuse: Dla mnie REST to zwykle też infrastruktura, więc może być w tym samym (⌐ ͡■ ͜ʖ ͡■)

A po co exceptionom jakieś wyjątkowe traktowanie skoro mogą pojawić się w tylko w infrastrukturze i tam będą przechwycone? Domain-driven, a nie stary-tutorial-z-pakietami-wg-rodzajów-obiektów-driven ( ͡° ͜ʖ ͡°)
0