Questo materiale fa parte della serie "Introduzione allo sviluppo aziendale" . La prima parte, sul networking, è qui . Parte 2. Parliamo un po' dell'architettura software - 1L'architettura software si riferisce alla struttura creata all'interno di un'applicazione, ovvero i moduli ei componenti dell'intero programma e il modo in cui interagiscono. I programmatori hanno lavorato su buone architetture per molto tempo, quindi non sorprende che abbiamo sentito parlare di molti modelli architetturali. Devi capirli: quando scrivi un'applicazione web, è fondamentale trovare una buona architettura, perché un'applicazione web ha più componenti e moduli di un'applicazione normale. Un modello architettonicoè un modo intelligente per risolvere alcuni problemi di progettazione del software. Probabilmente ti sei imbattuto in modelli di progettazione come metodo di fabbrica, fabbrica astratta, costruttore, prototipo, singleton e forse altri. Li usiamo per scrivere codice, creare classi e pianificare come le classi interagiranno. I modelli architetturali vengono utilizzati a un livello di astrazione più elevato, quando si pianifica l'interazione dell'utente con server, dati e altri componenti. Diamo una rapida occhiata ad alcuni modelli e come usarli.

Architettura client-server

Il nome crea l'impressione che tutto ciò che riguarda questo modello sia semplice e chiaro. Ma chiariamo alcuni punti, così quando inizierete a studiare la Primavera capirete di cosa stiamo parlando. Diciamo che hai scritto un'app di chat e tu e un amico iniziate a usarla. Potresti adottare un approccio molto semplice, scambiandoti messaggi direttamente via Internet utilizzando indirizzi IP noti: Parte 2. Parliamo un po' dell'architettura software - 2All'inizio, tutto sembra funzionare bene fino a quando un altro dei tuoi amici non chiede di unirsi alla chat. Quindi, quando decidi di aggiungere il tuo amico comune alla chat, devi affrontare un problema di architettura: per ogni partecipante alla chat, devi fornire informazioni aggiornate sul numero di utenti e l'indirizzo IP dei nuovi utenti. E quando viene inviato un messaggio, deve essere consegnato a tutti i partecipanti. Questi sono i problemi più evidenti che sorgeranno. Un altro gruppo di problemi sarà nascosto nel codice stesso. Per evitarli, è necessario utilizzare un server, che memorizzerà tutte le informazioni sugli utenti, inclusi i loro indirizzi. I messaggi devono essere inviati solo al server. A sua volta, invia messaggi a ciascuno dei destinatari. Quando decidi di aggiungere una parte server alla tua app di chat, inizi a creare un'architettura client-server.

Componenti dell'architettura client-server

Vediamo di cosa si tratta. Un'architettura client-server è un modello di progettazione utilizzato per creare applicazioni web. Questa architettura è composta da tre componenti: Parte 2. Parliamo un po' di architettura software - 3
  1. Client — Dal suo nome, possiamo dire che questo componente utilizza un servizio (l'applicazione web), contattando un server per richiedere alcune informazioni.

  2. Server — Qui è dove si trova la tua applicazione web o la sua parte server. Memorizza le informazioni utente necessarie o può richiederle. Inoltre, quando un client invia una richiesta, è il server che restituisce le informazioni richieste.

  3. Rete: questa parte è semplice. Facilita lo scambio di informazioni tra client e server.

Il server può gestire un numero enorme di richieste da utenti diversi. Ciò significa che possono esserci molti client. Se hanno bisogno di scambiare informazioni tra di loro, questo deve avvenire attraverso il server. Pertanto, il server ha un'altra funzione: il controllo del traffico. Per quanto riguarda il nostro programma di chat multiutente, tutta l'intera applicazione sarà composta da due moduli:
  • un modulo client — contiene un'interfaccia grafica per l'accesso e l'invio/la ricezione di messaggi

  • un modulo server: un'applicazione Web ospitata su un server che riceve messaggi dagli utenti, li elabora e quindi li invia ai destinatari

Parte 2. Parliamo un po' di architettura software - 4Quando vogliamo cercare informazioni utili (o poco utili) su Internet, apriamo un browser, inseriamo una query nella barra di ricerca e riceviamo informazioni dal motore di ricerca in risposta. In questa catena, il browser è il client. Invia una richiesta con informazioni su ciò che stiamo cercando al server. Il server elabora la richiesta, trova i risultati più pertinenti, li impacchetta in un formato che il browser (client) può comprendere e li invia indietro. Servizi complessi come i motori di ricerca possono avere molti server. Ad esempio, un server di autorizzazione, un server per trovare informazioni, un server per generare la risposta, ecc. Ma il client non è a conoscenza e non si preoccupa di nulla di tutto ciò: per il client, il server è un'entità unificata. Il client conosce solo il punto di ingresso, ovvero, l'indirizzo del server a cui inviare le richieste. Ricordiamo l'applicazione che abbiamo esaminatola parte precedente di questa serie . Serve per monitorare la temperatura media dell'aria in tutti i paesi in tempo reale. La sua architettura è simile a questa: Parte 2. Parliamo un po' di architettura software - 5La nostra applicazione si trova sul server. Diciamo che ogni cinque secondi invia richieste ai server gestiti da stazioni meteorologiche locali, riceve informazioni sulla temperatura per un determinato paese dai server e memorizza queste informazioni. Quando il cliente ci chiede di "visualizzare l'attuale temperatura dell'aria mondiale", restituiamo le informazioni memorizzate più di recente, ordinate per paese. Pertanto, la nostra applicazione funge sia da server (quando elabora le richieste degli utenti) che da client (quando riceve informazioni da altri server).
Ecco un punto importante: il concetto di server non riguarda un computer specifico, ma piuttosto la relazione tra entità di rete .
Una semplice architettura client-server viene utilizzata molto raramente e solo per applicazioni molto semplici. Per progetti davvero grandi e complessi, utilizziamo diverse architetture, che incontrerai in futuro. Ora diamo un'occhiata a un modello molto simile all'architettura client-server.

Architettura a tre livelli

Questo è un modello architettonico che introduce un terzo modulo: l'archiviazione dei dati . In questo modello, i tre livelli sono generalmente chiamati livelli o livelli: Parte 2. Parliamo un po' dell'architettura software - 6
  1. Il livello client è l'interfaccia utente, chiamata anche livello di presentazione. Può essere un browser Web che riceve pagine HTML o un'interfaccia utente grafica scritta utilizzando JavaFX. La cosa principale è che questo livello consente all'utente di inviare richieste al server ed elaborare le sue risposte.

  2. Il livello logico è il server che elabora le richieste/risposte. Spesso è anche chiamato il livello del server. Questo è anche il luogo in cui si svolgono tutte le operazioni logiche: calcoli matematici, operazioni sui dati, chiamate ad altri servizi o archivi di dati, ecc.

  3. Il livello dati è il server del database: il nostro server interagisce con esso. Questo livello memorizza tutte le informazioni necessarie per il funzionamento dell'applicazione.

Pertanto, il nostro server si assume ogni responsabilità per l'accesso ai dati e non consente all'utente di accedervi direttamente.

Vantaggi di un'architettura a tre livelli

Un'architettura come questa ci offre molti vantaggi, tra cui:
  1. La capacità di proteggere da SQL injection (questo è un attacco a un server; comporta l'invio di codice SQL che, una volta eseguito, consente a un utente malintenzionato di influenzare il nostro database).

  2. Separazione dei dati a cui vogliamo controllare l'accesso degli utenti.

  3. La possibilità di modificare i dati prima di inviarli al cliente.

  4. Scalabilità (la capacità di espandere la nostra applicazione a più server che utilizzeranno lo stesso database.

  5. Requisiti meno severi sulla qualità delle connessioni degli utenti. Quando generiamo una risposta sul server, spesso otteniamo molte informazioni diverse da un database e le formattiamo, lasciando solo ciò di cui l'utente ha bisogno. In questo modo si riduce la quantità di informazioni che inviamo nella nostra risposta al cliente.

Quanto spesso dovrebbero essere usati i modelli architettonici?

Se hai familiarità, ad esempio, con il modello di progettazione del metodo di fabbrica , probabilmente ti sei chiesto quando usarlo. A volte è difficile decidere cosa fare: creare un oggetto usando l'operatore new o usando un metodo factory. Ma col tempo arriva la comprensione. Le cose sono leggermente diverse quando si tratta di modelli architettonici. I framework aziendali sono progettati per consentire a un programmatore di creare un progetto basato su un modello generalmente accettato. Di conseguenza, prima di apprendere lo Spring Framework, dovresti assolutamente comprendere l'architettura client-server, l'architettura a tre livelli e l'architettura MVC. Non preoccuparti: parleremo ancora dell'architettura MVC. Parte 3. HTTP/HTTPS Parte 4. Le basi di Maven Parte 5. Servlet e Java Servlet API. Scrivere una semplice applicazione web Parte 6. Contenitori servlet Parte 7. Introduzione al pattern MVC (Model-View-Controller)