siemanko
droczę się z tym już jakiś czas i z myślą, że w końcu dojdę do swoistego wniosku tematu robić nie chciałem, no ale nie mogę się powstrzymać :)
chciałem zapytać co sądzicie o takim restrykcyjnym trzymaniu się zasady, że "kodujemy według interfejsów" tj że np mamy interfejs:
public interface ChickenService{
public boolean getChicken();
}
I teraz tworzymy klasy:
public class HugeChickenService implements ChickenService{
public boolean getChicken(){
//stuff
}
}
public class TinyChickenService implements ChickenService{
public boolean getChicken(){
//stuff
}
}
No i w naszej klasie, która używa serwisu mamy @Inject
albo @Autowired
na polu: private ChickenService chickenService
i sobie tam ustalamy @Qualifier
czy jakoś inaczej, która implementacja ma być używana, z resztą sami wiecie
Pytanie moje jest następujące: chce zrobić np. klase @Service
która mi sprawdza coś drobnego, czego na 99% więcej niż 1 implementacji nie będzie. Tworzyć w tym wypadku osobno interfejs i klase go implementującą, jako jego implementacje, czy sobie darować i po prostu zrobić klase nie implemetującą nic i ją wstrzyknąć?
Dodając interfejs jest bardziej "stajlowo" no i kod jak to mówią "podatniejszy na rozbudowe", ale czy jest w takim wypadku sens ciapać jeszcze interfejs bez sensu?
Drugie pytanie apropos klas Repository/Dao: jeśli np. potrzebuje w jakimś filtrze/gdziekolwiek jakąś metode z dao/repository, to robić taką delegacje: mojaKlasa -> service -> dao/repository
czy bezpośrednio: mojaKlasa -> dao/repository
?
Gdzieś przeczytałem że takie zasady panują i nie wiem czy się kurczowo trzymać tego, że tylko klasy @Service
mają dostęp do dao/repository. Bo jesli np w tym (przykładowo) filtrze potrzebuję metodę żywcem z repository to po co robić identyczną metode w service i potem ją wywoływać - czy to nie wprowadza trochę zbędnego kodu?
pozdr i dzięki za przeczytanie ;)