Obiektowo vs SQL

0

Witam mam pytanko/dylemat.
Mam 2 modele w tym jeden jest listą w drugim.

Usuwanie:
Programowanie obiektowe:

Restaurant restaurant = findById()
restaurant.deleteMeal(mealId)

wtedy w modelu restaurant:

void deleteMeal(UUID mealId){
    meals.stream.filter.findFirst()  <--- nie ważne
}

ALBO

w serwisie:

Meal meal = findByIdAndRestaurantId()
mealRepository.delete(meal)

Z zasad programowania obiektowego wydaje mi się 1 opcja bardziej podchodzi pod to.
Jak wy to widzicie, która opcja jest bardziej poprawna i będzie bardziej wydajna.

2

A dlaczego pierwsze jest lepsza od drugiej wg Ciebie? Czym się kierujesz?

2

Ja tu nie widzę w ogóle związku. Tzn nie wiem jak ty to chcesz "porównać". Dla mnie pierwsze jest na poziomie modelu domenowego, a drugie to na poziomie repozytoriów/persystencji.
W praktyce wygląda to np. tak ze przychodzi jakiś event do aplikacji, przepuszczasz go przez logikę domenową (czyli jakieś restauracje załadowane do pamięci, albo jak ich jeszcze nie ma to doładowujesz) i jak wszystko jest ok i akcja się powiodła, to następnie leci informacja do repozytorium żeby tą zmianę utrwalić (może nawet asynchronicznie, żeby nie spowalniać działania bez potrzeby)
Jak zrobisz tylko 1 to gdzie są te dane? Tylko w pamięci? Restart serwera i wszystkie zmiany idą do piachu? :)
Jak zrobisz tylko 2 to za każdym razem wczytujesz wszystko z bazy? Da się to co prawda zrobić, ale będzie pewnie tysiąc razy wolniej, no i trochę średni sens, bo np. wczytujesz tą samą restauracje 1000 razy na sekundę z bazy.

1

Co dzieje się z posiłkami, które usuwasz? Teoretycznie można domniemywać, że są z nimi powiązane jakieś zamówienia z przeszłości, wpłaty, paragony etc. W przypadku gdy robisz soft delete, to jeszcze ujdzie zabawa z pobieraniem obiektu do pamięci, ale jeśli to zwykły crud, to nie ma sensu się w to bawić tylko po to, żeby dać potem repo znać, że ten obiekt idzie do śmieci.
Sam niedawno bawiłem w cruda z repozytoriami (o zgrozo) i koniec końców skończyłem na tym, że mam w repo metode delete, gdzie robię wprost DELETE WHERE.

2

@Artur Kowalski cięzko cokolwiek doradzić nie wiedząc jak wygląda twoja aplikacja, jaką ma architekturę, jaką ma logikę, jakie są oczekiwania względem latency czy przepustowości. Prawda jest taka ze nie ma jednej poprawnej drogi. Rozwiązanie dobiera się do problemu.

0

@Charles_Ray: Po prostu chciałem się zapytać co będzie bardziej wydajne czy (szukać tego obiektu w bazie/wyszukać restaurację przejść po pętli posiłków) a następnie usunąć.

5

bardziej wydajne

To patrz: nawet domena pasuje ;)

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