Hej,
Jak dotąd pracowałem w nierelacyjnymi bazami w Go i struktura aplikacji wyglądała mniej-więcej tak:
Repository jako interfejs do zapytań bazy zwracający strukturę 1:1 z mongo i w razie potrzeby assembly do ViewModeli.
Teraz chciałbym w prywatnych projektach użyć relacyjnej bazy danych (prawdopodobnie Postgresa) i zastanawiam się jak to połączyć w całość, żeby kod był w miarę przejrzysty
Powiedzmy, że mam 2 tabele np user i user_posts. W prostym przypadku mogę pobrać najpierw usera a później jego posty i będę mieć 2 struktury odpowiadające widokowi.
Teraz chcemy pobrać np 10 ostatnich postów i informację o użytkowniku - wypadałoby stworzyć nową strukturę która ma w sobie np te 2 wyżej wymienione struktury i załątwić to 1 query, czyli już mamy 3 strukturę.
Teraz np chcemy wyświetlić 2 pola z users i 2 pola z user_posts - też pewnie lepiej by było to załatwić 1 selectem i pobrać to co potrzebujemy, a nie pobrać wszystko i później w kodzie wyciągać ze struktur to co potrzebujemy - dochodzi kolejna struktura.
Wraz z wielkością projektu zacznie to się niesamowicie rozrastać i będzie ciężko to utrzymać.
Prosiłbym o pomoc jak zorganizować kod w Go i w jaki sposób uchronić się przed tak szybko rosnącą(o ile się da zrobić to sensownie) ilością struktur. Nie chciałbym używać ciągle np struktur user i userPosts z użyciem omitempty, bo to wydaje mi się złe. Z tego co próbowałem doczytać, w innych językach są mapery. Mogę zawsze próbować to rzutować na mapę i robić customowe ready z bazy, ale wtedy zabraknie mi 'znajomości' struktur danych po wykonaniu zapytań.