L'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:
All'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:
-
Client — Dal suo nome, possiamo dire che questo componente utilizza un servizio (l'applicazione web), contattando un server per richiedere alcune informazioni.
-
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.
-
Rete: questa parte è semplice. Facilita lo scambio di informazioni tra client e server.
-
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
Quando 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:
La 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 . |
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:
-
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.
-
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.
-
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.
Vantaggi di un'architettura a tre livelli
Un'architettura come questa ci offre molti vantaggi, tra cui:-
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).
-
Separazione dei dati a cui vogliamo controllare l'accesso degli utenti.
-
La possibilità di modificare i dati prima di inviarli al cliente.
-
Scalabilità (la capacità di espandere la nostra applicazione a più server che utilizzeranno lo stesso database.
-
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.
GO TO FULL VERSION