Jaki to wzorzec projektowy

0

Trafiłem do nowego projektu, który składa się z około 15 modułów mavenowych, a każdy z nich z kolejnych 3 - 10. W każdym występuje pełno zależności między-modułowych (tzn klasy z modułu A korzystają z klas z modułu B). To co zwróciło moją uwagę to nietworzenie typowych klas będących kontrolerami, a wystawienie interfejsów z adnotacją @RestController i sygnaturami metod w podpakiecie A, a implementacja tego interfejsu jest już w podpakiecie B. Czy to jest jakiś wzorzec projektowy? I druga kwestia to zauważyłem, że jest też sporo klas, która rozszerzają jakąś tam klasę generyczną, która przyjmuje jako parametr typ interfejsu o którym pisałem przed chwilą (ten z @RestController) i na tej podstawie generuje jakieś proxy dzięki któremu mogę sobie wołać te metody. I znowu - czy to jest to jakiś wzorzec projektowy i czy opisane techniki są popularne/mają sens?

1
anckor napisał(a):

Trafiłem do nowego projektu, który składa się z około 15 modułów mavenowych, a każdy z nich z kolejnych 3 - 10. W każdym występuje pełno zależności między-modułowych (tzn klasy z modułu A korzystają z klas z modułu B). To co zwróciło moją uwagę to nietworzenie typowych klas będących kontrolerami, a wystawienie interfejsów z adnotacją @RestController i sygnaturami metod w podpakiecie A, a implementacja tego interfejsu jest już w podpakiecie B. Czy to jest jakiś wzorzec projektowy?

Też widziałem projekt który interfejsy kontrolera miał w module A, a jego implementacje w module B. Wydaje mi się że to jakaś forma oddzielenia kontraktu wystawianego na świat od implementacji - że niby możesz podmienić implementację z modułu B na implementacje C. Wydaje mi się że to trochę overkill w przypadku implementacji @RestController ale też jest szansa że ja za mało wiem. Jaki to wzorzec? Bo ja wiem, może to bardziej zasada podstawienia Liskova niż wzorzec. Sumując: widziałem coś takiego, nie do końca rozumiem dlaczego.

I druga kwestia to zauważyłem, że jest też sporo klas, która rozszerzają jakąś tam klasę generyczną, która przyjmuje jako parametr typ interfejsu o którym pisałem przed chwilą (ten z @RestController) i na tej podstawie generuje jakieś proxy dzięki któremu mogę sobie wołać te metody. I znowu - czy to jest to jakiś wzorzec projektowy i czy opisane techniki są popularne/mają sens?

Widziałem kod napisany w taką mańkę i wydaje mi się że jest to rezultat tego że programiści zbyt bardzo do serca wzięli sobie diagramy UML analityków.

0

A nie możesz zapytać kolegów z zespołu? Najlepiej znają kontekst, może powiedzą coś sesnsownego.

3

Pierwsze to coś w stylu client jar - https://stackoverflow.com/questions/3484063/using-the-client-jar-in-ejb-3-and-design-patterns
W dawnym EJB (szczególnie EJB 2.x) tak się robiło, w projektach opartych o REST zwykle jest mały sens (chyba, że masz klienty javowe, robione w ramach tej samej firmy).

Drugie to pewnie taki EJBHolder, CDI Instance, Provider - wrapper na obiekt zdalny. Znowu patent znany raczej z dawnych czasów i raczej nie ma wielkiego sensu w nowych projektach. Podejrzewam, że to proxy to się samo robi przez platformę (Java EE ? Spring?). (ale jak nie to jakiś dramat).

Strzelam, że:

  • albo niezbyt precyzyjnie napisałeś i źle się domyślam,
  • albo masz starego niemieckiego architekta i germański (naturą) zespół, który pisze od 20 lat tak samo, nieważne w jakim frameworku (kult cargo).
0

Trudno ocenić nie widząc dokładnie tego kodu :) Wydaje mi się że moduł z interfejsami to własnie jakiś taki client-jar, zresztą sam tak często robie, że mam napisanego klienta i siedzi on w osobnym module razem z potrzebnymi interfejsami i DTOsami.
Ma to tez sens jako api-jar czasami, bo np. zakładasz ze ktoś może chcieć napisać własną implementacje czegoś, pluginu, czy komponentu. Wielu ludzi robi tak, że wrzuca interfejs obok implementacji i potem jak chcesz napisać nową implementacje to i tak musisz wciągnąć sobie jara ze starą.

Jeśli chodzi o te proxy to trudno powiedzieć nie widząc co to proxy faktycznie robi :) Możliwe że ma to sens, bo np. automatycznie spina ci to wszysto z jakimiś wewnatrzfirmowymi toolami, może z jakimiś metrykami, logowaniem itd.

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