Warstwa pomiędzy DAO i API

Warstwa pomiędzy DAO i API
marta1995
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 5 lat
  • Postów:155
0

Czołem!

Słyszałam o podejściu, gdzie nie powinno się bezpośrednio wstrzykiwać obiektu DAO do API. Powinna być dodatkowa klasa pośrednicząca pomiędzy tymi elementami.
Co sądzicie o takim podejściu? Powinno się tak robić? Dlaczego? Jakieś przykłady implementacyjne? Polecicie coś do poczytania na ten temat?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
4

Proponuje się nie przejmować i kodować swoje.

Te historie o podejściu gdzie się powinno lub nie powinno to zwykle wyglądają tak jak w podanym artykule.
https://joemonster.org/art/19319

Przy okazji - artykuł to bzdura, małpy nie są takie głupie. Ale ludzie w IT niestety.

Jeśli nie robisz akurat oprogramowania do lotu na marsa, to polecam po prostu zepsuć, sparzyć się. Wskazany przez Ciebie problem istnieje, ale nie ma prostego rozwiązania w postaci: rób warstę, nie rób warstwy. To zależy


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
marta1995
I tutaj chciałabym docieć i usłyszeć od czego zależy. Chcę zgłębić ten temat, lubie wiedzieć dlaczego
marta1995
dziekuje, zapoznam się
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Jak masz Generic Cruda to nie widzę sensu robienia dodatkowej warstwy tylko po to żeby była. Jeśli faktycznie masz kontroler który bezpośrednio wypycha na świat dane z repozytorium/dao to tak zrób.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
marta1995
Tak robie, tylko nie wiem czemu tak robie. Szukam odpowiedzi czemu musi być ta warstwa pośrednia. Co ona mi daje?
Shalom
No jak serio wypychasz tylko dane z bazy, to nic. Ale popatrz np. na http://archive.eso.org/scienceportal/home tutaj w bazie masz tylko jakieś metadane najwyżej, a same zdjęcia i dane z teleskopów są w innym miejscu. Ty sobie celujesz w jakis punkt na niebie i wysyłasz request, cośtam sie odczyta z bazy, ale cała logika z dopasowaniem danych do twojego zapytania i wyciągnięciem realnych danych dzieje sie właśnie w tejze "warstwie pośredniej", która stanowi pewnie 95% całej tej aplikacji. Tam są terabajty danych i nie leżą one w bazie ;)
YA
  • Rejestracja:około 10 lat
  • Ostatnio:około 16 godzin
  • Postów:2372
2

Przede wszystkim odpowiedz sobie na pytanie "jaki (Twój) problem rozwiąże wprowadzenie tej dodatkowej warstwy".

danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
0

Warstwa pośrednia jest Ci potrzebne jeśli wykonujesz np jakieś obliczenia na danych. Coś wiecej niż tylko select do bazy, jak na przykład wygenerowanie jakiegos raportu.
API przyjmuje request
środkowa warstwa analizuje jakie dane potrzebuje
DAO pobiera dane
środkowa warstwa obrabia te dane, filtruje, cos tam oblicza
API zwraca wynik

Jesli tylko pobierasz dane to nie ma sensu się bawić


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
DY
  • Rejestracja:prawie 21 lat
  • Ostatnio:9 miesięcy
0

Taka warstwa jest jak najbardziej dobrą praktyką (nawet jeżeli miałaby tylko pośredniczyć w wypychaniu tych samych danych). Nie wiadomo jak aplikacja będzie się rozwijała w przyszłości a w ten sposób kontroler pozostanie zawsze "cienki". Pewnie też jakieś testy trzeba będzie napisać w przyszłości, a zawsze łatwiej potem testować taką klasę niż kombinować coś z metodami kontrolera.

catom
A czy nie lepiej w takiej sytuacji po prostu dodać taką warstwę, gdy będzie ona naprawdę potrzebna (tj. w momencie, w którym będzie coś więcej niż proste wywołanie repozytorium)? Wydaje mi się, żę podejście KISS / YAGNI tutaj będzie jak najbardziej słuszne.
DY
Komercyjny projekt od studenckich ćwiczeń różni to że na początku czyni się jakieś założenia i przewiduje wszystkie przypadki (szczególnie te najgorsze tj. że ludzie będą z niego masowo korzystali :) ) bo projekt musi działać i dać się rozwijać, a studenckie dywagacje można... no. Jeżeli chcemy poćwiczyć działanie i same funkcjonalności to nie ma problemu można taką warstwę pominąć (na pewno będzie szybciej). Jeżeli coś jednak ma być z tego projektu w przyszłości to warto zacząć to tak żeby nie trzeba było potem przekopywać połowy kodu drżąc przy każdej linijce.
catom
Oj, widziałem takie komercyjne projekty, gdzie właśnie podchodzono do tego tak warstwowo. Bardzo często sprowadzało się to do tego, że był Service (interfejs + implementacja) i DAO (interfejs + implementacja), gdzie service jedynie wprost wywoływał metody DAO. Czy nie właśnie to powoduje, że musimy przekopywać się przez obiekty, które kompletnie nic nie robią? Czy to nie jest niepotrzeby boilerplate? A jeśli rzeczywiście, zajdzie potrzeba dodania takiej warstwy, nie ma problemu, żeby go dodać w ramach rozwoju projektu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.