Jakiś czas temu zabrałem się za refaktoryzację swojej starej aplikacji, napisanej w Spring-Boocie. Tematyka, to Symulator giełdy Kryptowalut.. Tutaj wątek w którym prosiłem o ocenę starego kodu: Code review. .Teraz już powoli kończę wcześniej wspomnianą refaktoryzację. Postarałem się zmienić pakietowanie z per warstwa na per funkcjonalność. Powywalałem zewsząd settery (w końcu zrozumiałem na czym polega immutability). Starałem się pisać z jak najmniejszą ilością klas publicznych. Przeważnie jedna klasa Facade publiczna w pakiecie, nie licząc dtosów oraz Enumów (klasę Cryptocurrency traktuję jako Enum mimo, że jest to klasa zapisywana w bazie danych). Zmieniłem przechowywanie informacji w sesji, na rzecz tokena - oglądnąłem materiał nat. GC i imo - podejście bardziej przyjazne dla GC oraz mniej pamięciożerne na serwerze. Muszę jeszcze zmienić mechanikę wyciągania OwnedCryptocurrency (wyciągam z klasy User, zamiast z bazy danych po User ID). W bazie danych mam dwa triggery odpowiedzialne za zmianę statusu oferty i dodanie użytkownikowi usd/owned_cryptocurrency.
Jeżeli mógłbym prosić, to prosiłbym o wytknięcie błędów które jeszcze mam. Zastanawiam się też nad trzema rzeczami:
-
Typy proste vs Obiekty. Czy nie lepiej korzystać z typów prostych zamiast z obiektów tam gdzie to możliwe? Czy w klasach @Entity lepiej ze względów bezpieczeństwa korzystać z BigDecimal zamiast np double? Po pierwsze mniej pamięci zżerają, a po drugie są mniej obciążające dla GC.
-
Lepiej, gdy klasa @Entity dostarcza metodę zwracającą DTO, czy lepiej zostawić to dla jakiegoś Mappera? Wiem, że i jedno i drugie ma swoje korzyści i prawdopodobnie zależy to od założenia (np Mapper zapewnia więcej możliwości zmapowania Obiektu, natomiast metoda w klasie jest imo bardziej intuicyjna).
-
Bardziej porada niż pytanie. Każdy wie, że od juniora java dev, wymaga się nie tylko javy, springa, wzorców projektowych, clean-code, ale także dobrej znajomości SQL, Angulara, AWS itd. Czy na chwilę obecną, po code-review, mógłby ktoś stwierdzić na czym powinienem się teraz skupić? Douczyć się Springa, SQL, czy może czegoś innego (np. WebFluxa)? Subiektywnie mogę stwierdzić, że Javę w miarę umiem, Springa znam podstawy, SQL - nie wiem jak to przetłumaczyć ale very-basic. Wzorce projektowe i clean-code - też mi się wydaje, że znam (bardziej teoretycznie niż praktycznie, np. prostsze programy jestem wstanie komuś zrecenzować i wytknąć błędy, albo czasami wiem, że w danej chwili "rzeźbię w brązie" ale na chwilę obecną nie umiem zaimplementować tego tak jakbym chciał od początku).
Każdemu dziękuję za informację zwrotną.