Aktywne Wpisy
sylwke3100 +5
Ile mieście lat jak pierwszy raz wyjechaliście choćby na jeden dzień za jakiekolwiek granicę?
KingaM +28
Byłam na świniobiciu i tęsknie za tym klimatem, jako dzieciak, pamiętam to jeszcze z czasów przedunijnych, kiedy można było na legalu ubić świniaka. Upalny letni dzień na gospodarce. Tucznik został zaklinowany w dwie stare stalowe kraty od klatki dla świniaków i oczywiście kwiczał w niebogłosy, bo czuł, co się święci. Wujo ciapnął mu gardło, a krew łapali do garnka na kaszankę. Potem było oparzanie martwego świniaka i skrobanie. Najdłużej trwało patroszenie i
Próbuję wdrożyć w dużym projekcie na backendzie architekturę typu
route -> controller -> service
.Controller otrzymuje req i res, i wywołuje services (które są zwykłymi funkcjami komunikującymi się z bazą), a potem zwraca to co dostał od danego service.
Powiedzmy że mam w bazie dwie tabele - users i pets. User może mieć wiele petów, więc tabela pets ma foreign key usera.
I teraz co zrobić jeśli chcę usunąć usera?
1. W controllerze wywołać z service Pet funkcję deletePetsOfUser, a potem z service User funkcję deleteUser.
2. W controllerze wywołać z service User funkcję deleteUser, która wywoła w sobie z service Pet funkcję deletePetsOfUser, a potem bezpośrednio usunie usera.
3. W controllerze wywołać z service User funkcję deleteUser, która bezpośrednio usunie zarówno pety usera jak i samego usera.
Co będzie lepszym rozwiązaniem jeśli chodzi o logikę, utrzymanie i zrozumienie kodu?
Ja generalnie uważam, że w controllerze nie powinno być zbyt dużo logiki.
Czy masz możliwość w UserService wrzucić PetService? Ja bym to zrobił tak, że funkcja UserService.deleteUserWithPets () wywołuje PetService.deletePets(), a następnie this.deleteUser().
Komentarz usunięty przez autora
@Cebulaczon10: To usuwanie usera jest tylko przykładem i mógłbym tu faktycznie użyć casacde. Równie dobrze mogłaby tu być zupełnie inna czynność niezwiązana z usuwaniem. Ale mi bardziej chodzi cały sposób podejścia do problemu.
W repository będziesz miał tylko i wyłącznie metody odpowiadające za komunikację z bazą danych (get, getBy, insert, update, delete, deleteBy itd) dla konkretnej tabeli. Czyli np. UserRepository działa na tabelce 'users'.
W UserService będziesz miał UserRepository i inne serwisy, które będą Ci