Czy, np service zawsze powinny implementować interface?

0

Czytam stacka/blogi i widzę, że co następny wątek to zaprzeczanie temu co było napisane w innym, opisującym "to właściwe" podejście.
historia:

  1. Interfejs powinien być kontraktem pomiędzy klasą a wystawionym "api" dla uzytkownika zewnętrznego. Gdy masz wiele implementacji.. bla bla...
  2. Racja ale jeśli interface ma jedną implementacje, to sama w sobie jest tym kontraktem i nie trzeba wtedy interface
  3. Racja, ale co z unit testami? Do mockowania trzeba interface
  4. Racja ale są już takie biblioteki, w których możemy zastąpić te sztuczne interface potrzebne do unit testów..
    i tak dalej... niekończąca się opowieść..

Ja już sam nie wiem co o tym myśleć. Byłem jakiś czas temu na rozmowie i gość zapytał mnie po co są interface. Mówię mu o polimorfizmie, abstrakcji, kontraktach, ale chyba go to nie zadowoliło, bo odpowiedział "no ok, zgadza się, ale nie o to pytałem- to po co stosuje się interface?". I co mu powinienem wtedy odpowiedzieć? Grzebie w internecie i sensownych odpowiedzi nie widzę, wszędzie dyskusje... zostały tylko domysły
(mam nadzieje, że dobrze nakreśliłem problem)

4

Słusznie masz wątpliwości.
Jak Serwis ma jedną implementację to nie ma sensu wprowadzać interfejsu. Publiczne metody to wystarczający interfejs.
Dawno temu główne zrypane frameworki (Spring i JavaEE) wymagały technicznie robienia takich interfejsów więc się ludzie nauczyli.
Już od dawna oba nie wymagają, a mimo to kargo kult trwa w najlepsze. Jeszcze niektórzy dorabiają do tego jakieś bzdurne teorie. Olej.

0

[...] Dawno temu główne zrypane frameworki (Spring i JavaEE) wymagały technicznie robienia takich interfejsów więc się ludzie nauczyli.
Już od dawna oba nie wymagają [...]

Trochę mnie to dziwi, bo czytam sobie dokumentację Springa 3.0 i tam jednak piszą, że trzeba używać interfejsów albo konfigurować CGLIB. Chyba w 4.0 tak samo. To jak to jest?

0
jarekczek napisał(a):

[...] Dawno temu główne zrypane frameworki (Spring i JavaEE) wymagały technicznie robienia takich interfejsów więc się ludzie nauczyli.
Już od dawna oba nie wymagają [...]

Trochę mnie to dziwi, bo czytam sobie dokumentację Springa 3.0 i

Napisałem: dawno temu.
W Spring 4 nie trzeba.

0

Spring 4.0, 8.1.3 AOP Proxies.

Spring AOP defaults to using standard JDK dynamic proxies for AOP proxies. This enables any interface (or set of interfaces) to be proxied.
Spring AOP can also use CGLIB proxies. This is necessary to proxy classes, rather than interfaces.

Jesteście pewni, że adnotacja @Transactional zadziała bez CGLIB i bez interfejsu?

0

@jarekczek nie zadziała ale afair od Springa 4.3 cglibowe proxy są domyślnie dostępne i nie trzeba nic specjalnie konfigurować.

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