Czy powinno się oddzielać obiekty domain od kontrolerów?

0

Hej,
Zauważyłam dwa głowne podejścia w architekturach aplikacji w Springu.

  1. Oddzielone obiekty domain od logiki kontrolerów (w kontrolerach przyjmujemy DTOsy zamiast obiektów Entity).
    Moim zdaniem takie rozwiązanie ma jeden plus (pewnie ma więcej, ale ten wpadł mi pierwszy do głowy): nie musimy w kontrolerze wysyłać wszystkiego z domain - możemy sobie stowrzyć obiekt DTO i przesłać tylko to co nas interesuje.
    Minusy: trzeba pisać logikę mapującą obiekty dto na domain, a w większości przypadków te obiekty są takie same - co generuje niepotrzebny kod.
  2. Klasy domenowe w kontrolerach.

Która praktyka jest według Was lepsza?

5

Nie ma czegoś takiego jak logika kontrolerów. Z definicji kontroler nie powinien zawierać logiki. Nie powinien też wiedzieć o obiektach domenowych bo to zupełnie inna warstwa aplikacji. Ja osobiście preferuje rozwiązanie gdzie mam jakiś moduł server który jako jedyny ma powiązanie z frameoworkiem (o ile to potrzebne), wystawia endpointy, ogarnia security i takie tam i ten moduł zna tylko interfejsy logiki domenowej, z których korzysta w kontrolerach żeby wywołać odpowiednią akcje. Przyjmuje i zwraca DTO.
Obok są moduły z logiką domenową, które niczego nie wiedzą o tym w jaki sposób są używane, czy to aplikacja konsolowa, webowa czy cokolwiek innego. Nie wiedzą też nic o żadnych frameworkach.
A przemapować na DTO i tak musisz, bo zwykle nie chcesz wypychać wszystkich możliwych informacji.

a w większości przypadków te obiekty są takie same

Tak, chyba w Generic CRUDzie. W jakiejkolwiek aplikacji która faktycznie ma warstwę logiki domenowej, to bzdura i wewnętrzna reprezentacja danych/obiekty domenowe nijak sie maja do DTOsów które przychodzą/wychodzą z aplikacji.

Odnosze wrażenie ze twoje jedyne doświadczenie z architekturą aplikacji w Springu to jakieś g**no-tutoriale gdzie w ogóle nie ma logiki domenowej, tylko CRUD.

3

@platinium: podejrzewam że mylisz obiekty domenowe z encjami JPA.
Generalnie w większej aplikacji powinniśmy wystawic wartwę logiki biznesowej niezależną od niczego od warstwy prezentacji ani warsty persystencji i tam powinny być modele biznesowe. Do warstwy persystencji czy weba powinieneś miec oddzielne DTOsy na ogół.

1 użytkowników online, w tym zalogowanych: 0, gości: 1