Aggiungi il livello del database alla tua applicazione con un servizio o includilo direttamente?

0

Sto pianificando di creare una nuova applicazione Web che contenga le seguenti cose:

Voglio usare JavaEE con JSF per Frontend & Backend combinato con git-hooks per distribuirli sul mio server. Inoltre sembra utile integrare il framework Spring ogni volta che si utilizza JEE. Ora, inoltre, ho bisogno di un po 'di interazione con il database. Ora ho due possibilità:

  1. Configura un Rest-API che combina Java, Hibernate e Spring (almeno questo è ciò che la mia ricerca mi ha detto).

  2. Basta aggiungere un livello di ibernazione alla mia applicazione.

Perché dovresti usare il metodo 1? Quindi per me, ci sono le seguenti cose da fare quando si seleziona questo metodo:

  • Comunicazione con JSON, quindi hai bisogno di un mappatore su entrambi i lati
  • Dato che voglio passare oggetti, dovrei definire una classe (diciamo "libro") su entrambi i server - non sarebbe ridondante?
  • Includi meccanismi di sicurezza per l'API
  • Configura un server aggiuntivo per il servizio

Nel metodo 2, non avrei bisogno di alcun mapper o meccanismo di sicurezza per la connessione all'API, o ho sbagliato? Quindi, perché le persone dovrebbero usare il metodo 1?

    
posta Rüdiger 12.10.2018 - 13:50
fonte

1 risposta

0

La risposta a tale domanda non può essere breve, quindi iniziamo con i termini:

  1. frontend - sottosistema software che interagisce direttamente con l'utente. Nelle applicazioni consumer il termine "frontend" di solito si riferisce a un'applicazione in esecuzione in un browser Web o un'applicazione mobile.
  2. backend - sottosistemi software che non interagiscono direttamente con l'utente. Come sviluppatori di software di back-end di solito considerano il server applicativo o il microservizio più un database e servizi correlati (ad esempio, coda di messaggi o cache distribuita).
  3. JavaEE - non è più noto come tale. Il nome moderno di questo stack tecnologico è JakartaEE ( link ) Questo è un gruppo di specifiche di varie API in Java, che variano notevolmente in popolarità e utilizzo : il progetto JEE puro oggi non è una cosa comune - secondo molti sondaggi, solo le API Servlet e JPA sono ampiamente utilizzate come parte della combo Spring / Hibernate.
  4. JSF - più spesso odiato rispetto al framework UI che è in costante declino negli ultimi 5 anni a causa dei limiti della sua architettura. Non consiglierei di avviare un nuovo progetto su JSF e cercare una soluzione più tradizionale.
  5. Un livello nell'architettura software - parte separata dell'applicazione che svolge un ruolo specifico. Nei livelli di applicazioni Java sono in genere rappresentati da pacchetti specifici o persino moduli jar. Uno degli esempi di livelli è il livello di persistenza, che rappresenta un'astrazione orientata agli oggetti di un database. Per definizione il livello non è un'applicazione separata, quindi l'opzione 1 non ha senso come soluzione per interagire con il database. Hibernate come livello database ha comunque senso. Tieni presente che Hibernate è un'implementazione popolare dell'API JPA di JEE, quindi se sei già nello stack JEE, lo usi già o non ne hai bisogno, perché usi qualche altra implementazione (es. EclipseLink).

Ora parliamo dell'architettura in generale. La tua opzione 1 è una soluzione moderna e più popolare per l'intera applicazione. Spring è un framework di scelta per la maggior parte degli sviluppatori Java secondo recenti sondaggi (incluso SO), con sempre più di loro che scelgono Spring Boot come stack tecnologico completo e alternativo a JEE. Hibernate è una delle opzioni più popolari per la persistenza, ma ce ne sono altre: controlla la guida di riferimento di Spring Boot ( link ).

Costruire un'API REST sul backend (Spring Boot / Hibernate), che può essere consumato dal frontend è uno dei modi più semplici per sviluppare applicazioni web interattive oggi, ma ovviamente non è l'unico - scelta della particolare soluzione dovrebbe sempre essere basato sui requisiti aziendali. Per le applicazioni Web visualizzate nel browser, il frontend di solito viene scritto su JavaScript o lingue correlate (ad esempio TypeScript) con uno dei numerosi framework esistenti (selezionare Angular and ReactJS).

Le considerazioni sull'opzione 1 che menzioni:

  • La mappatura JSON è piuttosto semplice. Nel frontend è automatico, nel backend facilmente implementato con le librerie come Jackson - esce dalla scatola con Spring Boot.
  • Avrai un solo server, che fornirà l'API REST al frontend basato su JS o implementerà il rendering lato server (in JEE tramite JSF / JSTL, in Spring Boot - con Thymeleaf).
  • La sicurezza è un requisito aziendale. Se è necessario proteggere alcuni dati, deve essere implementata. Con Spring puoi usare Spring Security con varie opzioni.
risposta data 12.10.2018 - 23:22
fonte

Leggi altre domande sui tag