Czy, np service zawsze powinny implementować interface?

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)

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
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.


jeden i pół terabajta powinno wystarczyć każdemu
jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
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?


Przeważnie ignoruję niezarejestrowanych użytkowników.
SW
afaik, cglib jest wymagany w przypadku tworzenia mocków w przypadku gdy nie posiadasz interfejsów mockowanych obiektów, przy wstrzykiwaniu zwykłych klas nie ma potrzeby używania interfejsów tak jak napisał @jarekr000000
jarekczek
Ciekawe. Nie ma potrzeby, a dokumentacja mówi, że jest taka potrzeba.
jarekr000000
Żeby było śmieszniej to Spring 3.0 też nie potrzebuje tych interfejsów.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
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.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
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?


Przeważnie ignoruję niezarejestrowanych użytkowników.
jarekr000000
Ale dlaczego bez cglib?
jarekr000000
Dobra widze. Niejasne było musi być cglib albo interface. Op pytał o interfejsy.
jarekczek
Dlatego, że domyślnie jest wyłączony, jak mniemam.
jarekr000000
Zaraz jurgen bedzie o tym mówìł na żywo https://youtu.be/g5reY8inKUk
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.