Kilka pytań przed rozpoczęciem projektu w Spring

0

Tworzę aplikację internetową w Spring. Chcę zacząć nowy projekt, ale mam kilka pytań.

  1. Ostatnio użyłem w swoim projekcie AngularJS do pobierania danych z RESTowych metod Springa. Wszystko jest OK. Działą bez problemu, jednak jest mały haczyk. Sprawa tyczy się wyświetlania danych z Angulara za pomocą {{variable}}. Chodzi o to, że podczas ładowania strony internetowej na ułamek sekundy zawsze wyświetlają się ten zmienne Angulara razem z nawiasami. Nie powoduje to żadnych błędów, ale psuje to estetykę. Czy coś załaduje do tej zmiennej, czy warunkowo to zniknie, to i tak na ten ułamek sekundy jest to pokazane. Można to jakoś ukryć, czy mu si to tak być?

  2. Zawsze używałem w swoich projektach bazy MySQL. Teraz chciałbym spróbować czegoś nowego. Jaką polecacie szybką bazę danych SQL? Najlepiej darmową. PostgreSQL nadaje się?

  3. Zawsze robiłem walidację wprowadzanych danych na poziomie encji(adnotacje) lub jakichś warunków w kontrolerze. Zastanawiam się, czy zastosować również walidację na poziomie logiki biznesowej w serwisach. Bez sensu jest, aby serwisy służyły tylko do pobierania danych z bazy. Wydaje mi się, że również dobrym pomysłem jest zastosowanie walidacji również w serwisie. Jednak nie wiem, czy nie będzie to trochę obciążające, walidacja w encjach, kontrolerach i serwisach.

2

Ad. 1 nie wiem, front to nie moja bajka lecz google podsuwa takie rozwiązania:

Ad. 2 tak postgresql jest ok.
Ad. 3 Musisz zadać sobie pytanie co chcesz dodatkowo walidować. W controllerach masz walidacje DTO, na encjach zapinasz jakieś unique, notnulle etc. Co miałby walidować serwis?

2
Klawiatur napisał(a):
  1. Zawsze używałem w swoich projektach bazy MySQL. Teraz chciałbym spróbować czegoś nowego. Jaką polecacie szybką bazę danych SQL? Najlepiej darmową. PostgreSQL nadaje się?

Tak. Postgresql to nawet lepsza baza niż pseudobazy typu MySQL czy nie daj Boże MsSQL.

  1. Zawsze robiłem walidację wprowadzanych danych na poziomie encji(adnotacje) lub jakichś warunków w kontrolerze. Zastanawiam się, czy zastosować również walidację na poziomie logiki biznesowej w serwisach. Bez sensu jest, aby serwisy służyły tylko do pobierania danych z bazy. Wydaje mi się, że również dobrym pomysłem jest zastosowanie walidacji również w serwisie. Jednak nie wiem, czy nie będzie to trochę obciążające, walidacja w encjach, kontrolerach i serwisach.

Musisz to przemyśleć. Generalnie przeczytaj to:
https://stackoverflow.com/a/12149331

Możesz też zrobić walidatora bardziej uniwersalnego np. pakiet common-validators i PeselValidator, który to będzie używany w kilku miejscach i nie koniecznie w serwisie a np. w PeselFactory.
Nie przesadzaj i nie waliduj tam gdzie nie musisz. W serwisie możesz założyć, że DTO przyjdzie prawidłowe, bo przeszło walidacje w kontrolerze. Odrózniaj też walidacje biznesową gdzie trzeba przy walidacji odpytać bazę danych i taką walidacje musisz przeprowadzić przez klase walidatora a nie adnotacje. W niektórych przypadkach warto założyć, że obiekt zawsze przyjdzie z prawidłowymi danymi a w innych zawsze lepiej zrobić walidacje żeby nie dopuścić do krążenia po systemie obiektów w błędnym stanie czy dziwnych błędów. Walidować możesz nawet w klasach Utilsowych i rzucać wtedy np. IllegalArgumentException.

0

@artur52:
Ad. 1. Właśnie o to chodziło.
Ad. 2: Dobra, czyli użyję PostgreSQL.
Ad. 3: W sumie to muszę się jeszcze zastanowić co ja w sumie chcę tym osiągnąć.

@karolinaa: dzieli za link. Przestudiuję to co napisałaś i ten link.

Zastanawia mnie jeszcze kilka pytań:

  1. Podczas gdy używałem Spring Boot i ustawiałem sobie w pliku 'application.properties' odpowiednie dane do konfiguracji, to mogłem później w klasach Java użyć
 @Autowired
      private  Environment environment;

do pobierania właściwości z tego pliku. Jednak teraz chcę użyć do projektu samego Spring i tu pojawia się moje pytanie. Jeśli będę chciał przenieść dane do konfiguracji np. Spring Secuirty do pliku 'security.properties', to czy obiekt java Environment będzie wiedział o który plik properties mi chodzi, czy muszę to jakoś ustawić?

  1. Jeśli muszę umieścić w pliku properties wiele właściwości i potem je użyć, to który sposób jest lepszy? Utworzenie w górnej części klasy konfiguracyjnej wiele zmiennych i do nich załadować dane za pomocą adnotacji
@Value()

czy za pomocą tego obiektu Environment pobierać właściwości?

  1. Jaka jest różnica między plikiem typu '.properties', a '.yml'.

  2. Duża jest różnica wydajności pomiędzy Spring, a Spring Boot. Wydaje mi się, że przy małych aplikacjach większej różnicy nie ma, ale przy większych już tak.

  3. Podobne nie należy już używać templatek typu Themyleaf i wszystko należy ustawiać na stronie za pomocą js np. Angulara. A co w przypadku, gdy posiadam kilkadziesiąt stron i na każdej muszę załadować angulara o określonej wersji. Roboty sporo, a Thymeleaf może to uprościć, bo wystarczy, że w pliku properties umieszczę

# AngularJS
angular.js=/webjars/angularjs/1.6.4/angular.min.js

a na stronach wpiszę

<script type="text/javascript" th:src="#{angular.js}"></script>

Tym oto sposobem, gdy wyjdzie nowa wersja frameworka, to wystarczy, że zmienię w pliku properties wersje i wszystko będzie działać.

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