Cześć.
Od kilku lat pracuje jako java dev. Pamiętam jeszcze projekty w starszych wersjach Springa gdzie trzeba było konfigurować tone XMLi żeby wszystko chciało działać. Aktualnie Spring w mojej ocenie niesamowicie się zmienił i praca ze Spring Bootem + stackiem Springa jest bardziej przyjemna a community ogromne choć jak każda technologia ma ogrom zalet ale i też wad przez co nawet tutaj na forum często można spotkać opinie żeby szukać alternatyw. I super, bo to na pewno bardzo rozwojowe ale czy dobre w kontekście rozwijania projektów?
Jakiś czas temu chciałem napisać prototyp pewnej aplikacji i pomyślałem że bedzie to dobra okazja do nauki nowych technologi. Zamiast Springa postawiłem aplikację na alternatywnych technologiach, np.: Kotlin, Ktor (asynchroniczny serwer http), Kodein (IoC), JOOQ (dostęp do bazy danych).
Z jednej strony zauważyłem sporo zalet takiego podejścia. W przypadku JOOQ mam poczucie pełnej kontroli nad bazą danych (co w Spring Data czy w ogóle JPA nie zawsze było takie odczuwalne bo zawsze gdzieś ten element 'magi' w postaci wygenerowanych tabel czy zapytań pozostaje). Z drugiej jednak strony to co działało w Spring Data tutaj sprawia problemy, np część testów funkcyjnych uruchamiam na bazie H2 w pamięci. Problem w tym że w kodzie jak dodaje rekordy do bazy danych to potrzebuje je od razu zwrócić razem z id by dalej przetworzyć. Spring Data przy zapisie zawsze zwraca zapisaną encję a w jooq jest returning: https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/insert-statement/insert-returning/
Niby spoko, też fajnie ale na H2 to nie działa, problem zauważony już od 2014 roku a nadal nie jest naprawiony: https://github.com/jOOQ/jOOQ/issues/3035
Efekt jest taki że testy padają i trzeba robić jakieś workaround'y.
Inna sprawa to pobieranie konfiguracji z plików yaml albo propierties. W Spring'u mamy @Value który wszystko robi za nas. Bez springa trzeba kombinować i ręcznie wszystko zaciągać - niby są biblioteki typu Snakeyaml i inne tego typu ale nie jest to już tak intuicyjne.
Generalnie przykładów mógłbym powielać więcej ale nie rozwodząc się już zbyt mocno przejdę do puenty.
Czy to nie jest trochę tak że Spring jak każdy inny framework ma swoje wady i zalety i pewne rzeczy może faktycznie robi dziwnie i z jednej strony możemy na niego narzekać ale prawda jest taka że nie ma aktualnie równie dobrej alternatywy?
Czy koszt wprowadzenia nowych technologii i zmaganie się z innymi problemami (które i tak przyjdą bo żadna technologia nie jest idealna) nie jest czasami większy?
Spring ma za sobą ogromne community, całkiem długą historię rozwoju, wypracowane dobre praktyki i mimo że też nie jest pozbawiony wad to na codzień produkcyjnie korzystamy właśnie z niego bo tak naprawdę porzucenie jego niewiele by zmieniło (zamienilibyśmy jedne problemy na inne)?