Patres
#java #spring
Mireczki, mam taki przypadek: https://pastebin.com/4m58hnC1
W klasie abstrakcynej znajduje sie metoda execute, ktora wykonuje większość pracy, ale potrzebuje do tego kilku innych serwis. Klasy które po niej dziedziczą wykonują tylko drobną część i nie potrzebują żadnych dodatkowych serwisów.

Chciałbym wstrzyknąć dependency do konstruktora, tylko w klasach dziedziczących muszę za każdym razem wprowadzać te same serwisy, co mi się nie podoba, bo:
1. Duplikacja
2. Gdy zmienię metdę execute tak, że będzie wymagała jeszcze jednego serwisu to będę musiał edytować wszystkie klasy, które po niej dziedziczą aby wrzucić to dodatkowe dependency.

Teoretycznie mógłbym wrzucić te wszystkei serwisy do jednej klasy i go wstrzykiwać, ale średnio podoba mi się takie rozwiązanie: https://pastebin.com/9fiVgbFp

Jest na to jakiś pattern?
  • Najlepsze
  • Wszystkie komentarze
Patres
Patres Autor
1
@globalbus zrobiłem jak poleciłeś i nie wygląda to najgorzej. Dzięki!
K.....l
K.....l
@Patres: ja w klasach abstrakcyjnych uzywam po prostu wstrzykiwania bezposrednio w pola. Mniejsze zlo ( ͡° ͜ʖ ͡°)
Patres
Patres Autor
0
@Kuriozal: No właśnie zastanawiam się nad tym, choć wolałbym tego uniknąć. Jednak też wydaje mi się to mniejszym złem
globalbus
globalbus
@Patres: nie używać dziedziczenia, tylko agregacji. Opakuj sobie funkcjonalność w klasę i wstrzykuj ją tam gdzie potrzebujesz (obecnie w klasach nadrzędnych).
Patres
Patres Autor
0
@globalbus: Nie zawsze się da to zrobić agregacją, np. https://pastebin.com/npw2iiGT
globalbus
globalbus
@Patres: zawsze się da.
Dodaj interfejs z tymi metodami, a następnie przekaż jako argument to do metody execute
Patres
Patres Autor
0
@globalbus: Dać się da, ale czytelność mocno spadnie, jak wrzucę 4 albo 5 takich interfejs funkcyjnych do metody/konstruktora. Przy użyciu dziedziczenia i nadpisaniu metod wygląda to bardziej czytelnie.
globalbus
globalbus
@Patres: problem nieczytelności robi się wtedy, gdy musisz przeprojektowywać coś zaplanowanego w tym stylu. Klas abstrakcyjnych nie używam prawie wcale i nie czuję, aby mi to przeszkadzało, zwłaszcza w springu. To nie CXF, gdzie hierarchia dziedziczenia potrafi sięgać po 5 poziomów w dół.