Struktura projektu związanego z 2 części

0

Hej!

Zaczynam pewien projekt i nie bardzo wiem jak ugryźć strukturę.
Chciałbym aby całe przedsięwzięcie składało się z 2 części:

  • programu głównego, który będzie łączył się z pewnymi stronami w internecie, pobierał content, analizował, coś tam przeliczał, wypluwał jakieś efekty całego zamieszania
  • programu pobocznego, czyli nic innego jak aplikacja webowa umożliwiająca korzystanie z pierwszego (przechowywanie ostatnich efektów w bazie, wyświetlanie grafik, pobieranie wyników w pdfie i takie tam podobne, z uwzględnieniem oczywiście autoryzacji i autentykacji)

Moje pytania to:

  1. Czy da się zrobić tak, aby program główny był kompletnie niezależny od części webowej?
  2. Jak utworzyć ten projekt korzystając z mavena?
  3. Jak powinienem utworzyć strukturę plików/katalogów?

Zapewne tłumaczę to bardzo nieskładnie, więc proszę nie zniechęcajcie się, będę odpowiadał na każde pytanie ;)

2

1.Tak
2, Chodzi Ci o coś takiego?
3.J/w robisz moduł main i moduł client czy jakoś tak :)

1

Da się.

To, co chcesz uzyskać to typowy podział na backend i frontend.
Da się to uzyskać na wiele sposobów, obecnie najpopularniejszym jest taka architektura:

  • backend wystawia zbiór usług - w formie REST - i działa gdzieś w kontenerze aplikacji
  • frontend działa w całości samodzielnie w przeglądarce klienta, komunikuje się przez wspomniane usługi z BE

Ponieważ jednak ty chcesz mieć coś nieco bardziej skomplikowanego, tj. de facto dwa zestawy:

  • backend do pkt. 1
  • frontend + backend (komunikujący się z backendem z pkt. 1) do pkt. 2
    to będziesz musiał wystawić dwie aplikacje.

W Mavenie powinieneś mieć dwa oddzielne projekty.
Dodatkowo komunikacja pomiędzy takimi modułami to całkiem interesująca dziedzina informatyki i opcji jest dosyć dużo w zależności od potrzeb. Wydaje się, że wspomniany REST powinien ci wystarczyć.

0

@scibi92: Dokładnie o takie coś mi chodziło ;)
@wartek01:

frontend + backend (komunikujący się z backendem z pkt. 1) do pkt. 2
to będziesz musiał wystawić dwie aplikacje.

Nie umiem into JS, więc raczej będę obstawał przy NinjaFramework z MVC. Powiesz, że fuj bo jsp, ja powiem, że rzeczywiście fuj, ale robi robotę :P
A kwestia połączenia aplikacji będzie rzeczywiście ciekawa, nad tym muszę się jeszcze zastanowić ;)

0

No spoko można i tak. Tylko wtedy nie osiągniesz modularności (chyba bo nie ogarniam NinjaFramework, ale JSP lekkie nie są). Ale jeśli tobie pasuje to można żyć.

Reszta co napisałem ciągle daje radę.

0

@Burdzi0: polecam thymeleaf zamiast jakis dziadowskich JSTLi
A JS aż takie trudne nie jest, jeśli nie chcesz korzystać z jakiś uberframeworków i robić SPA to kilka godzin (no dobra może z 2 dni) i ogarniasz na tyle że jakieś tam AJAXy możesz robić akcje onclicki :D
O Bootstrapie do frontów słyszaleś?

0

To nie jest tak, że ja się upieram że musi być NinjaFramework ale wszystko w nim wydaje się być dosyć łatwe i jest od razu fullstack. Zobaczcie tutaj, dopiero raczkuję jeśli chodzi o webdev i chciałbym się najpierw nauczyć odpowiednio konceptów typu: baza danych, sesja, ciasteczka, logowanie (czyli używanie autoryzacji i autentykacji). Na Springa jeszcze za wcześnie. Co do Thymeleaf to nie wiem czy NinjaFramework pozwala na jego użycie, ale potem sprawdzę ;)

1
odpowiednio konceptów typu: ... , sesja, ...
                                  ^^^ Error : albo odpowiedni albo sesja

Takich rzeczy już sobie raczej nie robimy.

I też uważam, że SPA nawet z tym cholernym JS jest prostsze niż babranie się w renderowanie stron na serwerze.

0

Zakładając, że zrobiłem jak polecił @wartek01:

Ponieważ jednak ty chcesz mieć coś nieco bardziej skomplikowanego, tj. de facto dwa zestawy:

  • backend do pkt. 1
  • frontend + backend (komunikujący się z backendem z pkt. 1) do pkt. 2
    to będziesz musiał wystawić dwie aplikacje.

Zdecydowałem, że w drugiej części wykorzystam NinjaFramework (to jest coś co jestem w stanie ogarnąć w rozsądnym czasie - ogarnięcie JS + jakiś framework JS zajmie zbyt dużo czasu i spowoduje, że będę się miotał między technologiami).

Dodatkowo komunikacja pomiędzy takimi modułami to całkiem interesująca dziedzina informatyki i opcji jest dosyć dużo w zależności od potrzeb. Wydaje się, że wspomniany REST powinien ci wystarczyć.

Zapewne tak zrobię, ale nasuwają się kolejne pytania:

  • jak zabezpieczyć takie połączenie? (zastanawiam się nad pac4j + jakiś microframework do RESTa ale czy da się to jakoś ludzko połączyć bez obawy? Jeśli tak to czego konkretnie użyć?)
  • przesył obrazów za pomocą Base64 czy są do tego inne rozwiązania?
1
Burdzi0 napisał(a):
  • jak zabezpieczyć takie połączenie? (zastanawiam się nad pac4j + jakiś microframework do RESTa ale czy da się to jakoś ludzko połączyć bez obawy? Jeśli tak to czego konkretnie użyć?)

Ooo panie, to zaraz multum ekspertów się zleci i każdy doradzi co innego :)

Wszystko zależy od tego, jak bezpieczny ten setup chcesz mieć. Jeśli tam nie będą leciały jakieś dane osobowe, czy też ogarnięcie dostępu do tych usług nie spowoduje, że ktoś będzie mógł zdalnie podpalić tobie mieszkanie (to nie żart, rozmawiałem kiedyś z człowiekiem który wystawił REST API dla swojego IoT po prostu bezpośrednio do internetu) to wystarczy jakiś Basic Authentication, ewentualnie coś w stylu OAuth2.

Jeśli chcesz dodatkowo zabezpieczyć apkę przed dostępem osób trzecich to możesz się pokusić o jakiś 2-way SSL (zarówno serwer, jak i klient na starcie uwierzytelniają się certyfikatami), ewentualnie postawić MQ. Ale to chyba overkill w twoim przypadku.

  • przesył obrazów za pomocą Base64 czy są do tego inne rozwiązania

Jeżeli nie są to duże pliki to będzie OK.

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