Generyczny controller, service, mapper - dobre praktyki?

0

Spotkałem się na uczelni z takim podejściem, żeby dać generyczny controller, service na crudowe metody (a także generyczny mapper + generyczne entity, które zawiera tylko id).
Czyli np. UserController ma swoje własne metody, ale też rozszerza GenericController, który ma findAll, findById, update, delete

Czy spotkaliście się w projektach komercyjnych z takim podejściem kiedykolwiek, czy zapomnieć o tym na zawsze?

Przykładowa metoda z GenericController:

  @GetMapping
  public ResponseEntity<List<D>> findAll() {
    return new ResponseEntity<>(genericService.findAll().stream()
        .map(genericMapper::modelToDto)
        .collect(Collectors.toList()), HttpStatus.OK);
  }
5

Zapomnieć. Jak coś jest generycznego, to potem zaczynaja się haki jak coś zrobić jeśli mechanizm tego nie wspiera. Nie rozumiem tez co daje taka abstrakcja. Może jakiś inny był cel zajęć?

Kiedyś popularny był np. wzorzec „generic DAO”, żeby boilerplate code zaimplementować raz, ale pojawił się Entity Manager i to już nie było potrzebne. Tak więc na poziomie frameworków/bibliotek może ma to jakiś sens. Może własny framework robiliście :)

1

Spotkałem się z takim czymś w jednym z projektów, nawet napisałem sobie dla zabawy taki generyczny framework do crudów, @somekind chyba też coś takiego robił.

Sprawdzało się to dobrze do tego czym było. Warto zastosować tutaj template pattern i dać klientowi możliwość wpięcia wlasnej logiki na każdym etapie wykonywania.

0

Zupełny bezsens. Jak chcesz wystawić CRUDa encja na twarz i pchasz (tylko po co? o_O) to zapinasz tam Spring-Data-Rest i nie piszesz w ogóle żadnego kodu, bo nie ma to sensu. Masz tam z 5 linijek konfiguracji i voila, cała baza jest wystawiona CRUDowym restem.
W prawdziwym życiu raczej nie będziesz pisać takich gołych crudów.

2

Kiedyś popełniłem jakieś generyczne handlery/convertery, już nie pamietam co to było dokładnie, ale powstał straszny potwór.

Gdybym teraz spotkał siebie samego sprzed tych 7-8 lat dałbym sobie jedną radę: NIE RÓB TEGO ;P

0

No można, ale to zadziała tylko dla projektu crudowego w 100%. Kto tak naprawdę ma 100% cruda?

Charles_Ray napisał(a):

Zapomnieć. Jak coś jest generycznego, to potem zaczynaja się haki jak coś zrobić jeśli mechanizm tego nie wspiera.

O ile nie wspiera. Ale jak się zrobić tak, żeby nasz mechanizm nie kłócił się ze standardowymi mechanizmami frameworka, to to nie będzie sprawiać problemów.

Nie rozumiem tez co daje taka abstrakcja. Może jakiś inny był cel zajęć?

Nie tyle abstrakcja, co rezygnacja z boilerplate.

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