wydzielenie metody

0

siema
robie api w springu i mam metodę która powiedzmy ze sie powtarza w kilku kontrolerach i chciałbym jakoś to wydzielić, macie pomysł jak?
metoda robi update w jednej z kolumn i problem jest w tym że w ciele korzysta za każdym razem z innego DAO (pobiera dane i robi save)
coś w ten deseń

zaKazdymRazemInneDAO.save(....
ZaKazdymRazemInnaEncja zaKazdymRazemInnaEncja = zaKazdymRazemInneDAO.findBy....
zaKazdymRazemInnaEncja.set....

return zaKazdymRazemInnaEncja;
0

No i gdzie dokładnie widzisz problem? Zrób sobie jakiś obiekt z metodą w stylu:

<T> T someName(BaseDaoInterface<T> dao, T object){
    dao.save(object);
    T zaKazdymRazemInnaEncja = dao.findBy(...)
    zaKazdymRazemInnaEncja.set...
    return zaKazdymRazemInnaEncja;
}

To oczywiście wymaga żeby te operacje faktycznie miały spójny interfejs!

0

hmmm chyba jednak nie poradze sobie sam z tym... (nie kumam po prostu) - rozumiem do momentu ze mam zrobić sobie jakąś nową klase i tam wrzucić tą metodę

0
gerard9 napisał(a):

hmmm chyba jednak nie poradze sobie sam z tym... (nie kumam po prostu) - rozumiem do momentu ze mam zrobić sobie jakąś nową klase i tam wrzucić tą metodę

ZaKazdymRazemInnaEncja metoda (ZaKazdymRazemInneDAO zaKazdymRazemInneDAO, ZaKazdymRazemInnaEncja zaKazdymRazemInnaEncja) {
zaKazdymRazemInneDAO.save(....
zaKazdymRazemInnaEncja = zaKazdymRazemInneDAO.findBy....
zaKazdymRazemInnaEncja.set....

return zaKazdymRazemInnaEncja;
}
0

Oj nie mogę edytować, Adminie mógłbyś połączyć?

public ZaKazdymRazemInnaEncja metoda (ZaKazdymRazemInneDAO zaKazdymRazemInneDAO) {
zaKazdymRazemInneDAO.save(....
ZaKazdymRazemInnaEncja zaKazdymRazemInnaEncja = zaKazdymRazemInneDAO.findBy....
zaKazdymRazemInnaEncja.set....
 
return zaKazdymRazemInnaEncja;
}
1

Żeby to zrobić generycznie, to encje które chcesz modyfikować powinny dziedziczyć po jednej wspólnej klasie bazowej, która będzie posiadała definicje metody, którą chesz wywołać generycznie.

I wtedy definicję takiej generycznej metody możesz zapisać w jakimś helperze tak:

public static <T extends SomeBase> T genericMethod(Repository<T> repository, T object) {
    T entity = repository.save(object);
    entity.set(...); // i tu jest potrzebna base class, bo inaczej nie dostaniesz się do metod T, które chcesz setować
    return T;
}

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