Warstwa pomiędzy DAO i API

Odpowiedz Nowy wątek
2019-02-27 22:11

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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?

Pozostało 580 znaków

2019-02-27 22:22

Rejestracja: 3 lata temu

Ostatnio: 41 minut temu

Lokalizacja: U krasnoludów - pod górą

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


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2019-02-27 22:23
I tutaj chciałabym docieć i usłyszeć od czego zależy. Chcę zgłębić ten temat, lubie wiedzieć dlaczego - marta1995 2019-02-27 22:26
dziekuje, zapoznam się - marta1995 2019-02-27 22:32

Pozostało 580 znaków

2019-02-28 09:17
Moderator

Rejestracja: 16 lat temu

Ostatnio: 25 minut temu

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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Tak robie, tylko nie wiem czemu tak robie. Szukam odpowiedzi czemu musi być ta warstwa pośrednia. Co ona mi daje? - marta1995 2019-02-28 09:28
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 ;) - Shalom 2019-02-28 11:30

Pozostało 580 znaków

2019-02-28 10:15

Rejestracja: 4 lata temu

Ostatnio: 3 godziny temu

2

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

Pozostało 580 znaków

2019-02-28 10:16

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

Lokalizacja: Poznań

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.

Pozostało 580 znaków

2019-02-28 15:22

Rejestracja: 15 lat temu

Ostatnio: 8 miesięcy temu

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.

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. - catom 2019-02-28 17:13
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. - Dymb 2019-03-01 11:10
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. - catom 2019-03-01 11:18

Pozostało 580 znaków

Odpowiedz

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