Wpis z mikrobloga

#programowanie #webdev #nodejs #express
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?
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Alodnog: Może "on delete cascade"? :p

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().
  • Odpowiedz
@trevoz: W zasadzie to twoja odpowiedź mniej więcej pasuje do punktu 2, a ja sam do końca nie mam tego ustrukturyzowanego i czasem wywołuje w service inne service.
@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.
  • Odpowiedz
@Alodnog: może zastosuj pattern Controller -> Service -> Repository

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
  • Odpowiedz