5.3.2 – Architettura MVC e Node.js

Obiettivi della lezione:

  • Comprendere i principi dell’architettura MVC. Gli studenti impareranno a identificare e descrivere i componenti dell’architettura Model-View-Controller e il loro ruolo nello sviluppo di applicazioni web.
  • Analizzare le funzionalità di Node.js. Gli studenti acquisiranno conoscenze sul runtime JavaScript Node.js e su come viene utilizzato per costruire applicazioni server-side.
  • Esaminare i framework Express.js e Socket.io. Gli studenti comprenderanno le caratteristiche e i vantaggi di questi framework e come utilizzarli in combinazione con Node.js.

Architettura MVC (Model-View-Controller)

L’architettura MVC è un modello di progettazione software utilizzato per separare le preoccupazioni in tre componenti principali: Model, View e Controller. Questo approccio facilita la gestione del codice, migliorando la modularità e la manutenibilità delle applicazioni.

Componenti dell’architettura MVC

  • Model: Rappresenta la logica di business e la gestione dei dati. Il Model è responsabile dell’accesso e della manipolazione dei dati, spesso interfacciandosi con un database.
    • Esempio: In un’applicazione di e-commerce, il Model potrebbe includere le definizioni di prodotto, utente e ordine.
  • View: Rappresenta l’interfaccia utente e la visualizzazione dei dati. La View è responsabile della presentazione delle informazioni all’utente finale.
    • Esempio: In un’applicazione di e-commerce, la View potrebbe includere le pagine HTML che visualizzano i prodotti, i carrelli della spesa e le conferme degli ordini.
  • Controller: Gestisce l’interazione dell’utente e le richieste. Il Controller riceve input dall’utente tramite la View, elabora tali input utilizzando il Model e aggiorna la View di conseguenza.
    • Esempio: In un’applicazione di e-commerce, il Controller potrebbe gestire le richieste di ricerca dei prodotti, l’aggiunta di articoli al carrello e la finalizzazione degli ordini.

Node.js

Node.js è un runtime JavaScript open source che consente l’esecuzione del codice JavaScript lato server. È basato sul motore JavaScript V8 di Google Chrome ed è progettato per costruire applicazioni di rete scalabili.

Caratteristiche principali di Node.js

  • I/O asincrono e non bloccante: Node.js utilizza un modello di I/O asincrono che permette di gestire un gran numero di connessioni simultaneamente senza bloccare l’esecuzione del codice.
  • Architettura basata su eventi: Node.js è progettato per essere leggero ed efficiente, utilizzando un ciclo di eventi per gestire le operazioni asincrone.
  • Eccezionale ecosistema di pacchetti: Node.js include npm (Node Package Manager), che offre accesso a una vasta gamma di pacchetti e librerie open source.

Installazione di Node.js

  1. Installazione su Linux (esempio con Ubuntu):
sudo apt update
sudo apt install nodejs
sudo apt install npm
  1. Verifica dell’installazione:
node -v
npm -v

Esempio di server semplice con Node.js

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Express.js

Express.js è un framework per applicazioni web basato su Node.js che semplifica la creazione di applicazioni server-side. Offre una serie di funzionalità per la gestione delle richieste HTTP, la configurazione dei middleware e la definizione delle rotte.

Caratteristiche principali di Express.js

  • Middleware: Express.js utilizza middleware per gestire le richieste HTTP. I middleware sono funzioni che hanno accesso all’oggetto richiesta, all’oggetto risposta e alla funzione next.
  • Routing flessibile: Express.js consente di definire rotte per gestire richieste specifiche a vari endpoint.
  • Gestione semplice delle risposte: Express.js offre metodi per inviare risposte, gestire reindirizzamenti e gestire errori.

Esempio di applicazione semplice con Express.js

  1. Installazione di Express.js:
npm install express
  1. Server Express di base:
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

Socket.io

Socket.io è una libreria per la comunicazione in tempo reale tra client e server. È spesso utilizzata per applicazioni che richiedono aggiornamenti in tempo reale, come chat, giochi online e dashboard live.

Caratteristiche principali di Socket.io

  • Comunicazione bidirezionale: Socket.io consente la comunicazione bidirezionale tra client e server in tempo reale.
  • Supporto per vari trasporti: Socket.io utilizza WebSockets quando disponibili, ma può ricorrere ad altri metodi di trasporto come polling lungo.
  • Eventi personalizzati: Socket.io permette di definire eventi personalizzati per gestire varie azioni nel flusso di comunicazione.

Esempio di applicazione con Socket.io

  1. Installazione di Socket.io:
npm install socket.io
  1. Server Socket.io di base:
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

Esercitazioni pratiche

  1. Implementazione di un’applicazione MVC con Node.js e Express.js:
    • Creare una semplice applicazione web utilizzando l’architettura MVC. Gli studenti dovranno definire modelli, viste e controller per gestire una funzionalità di base, come un’applicazione di gestione delle attività.
  2. Creazione di un server in tempo reale con Socket.io:
    • Creare un’applicazione di chat in tempo reale utilizzando Socket.io. Gli studenti dovranno implementare la comunicazione bidirezionale tra client e server e gestire eventi personalizzati per l’invio e la ricezione di messaggi.