Il design pattern MVC in Java EE

MVC - Java EE

Introduzione

MVC è un design pattern(una soluzione progettuale generale ad un problema ricorrente) molto utilizzato nella progettazione del software.
MVC Stà per Model Controller View
.
MVC quindi è realizzato attraverso 3 componenti:

  • il model contiene i dati e fornisce i metodi per accedervi;
  • il view visualizza i dati contenuti nel model;
  • il controller riceve i comandi dell'utente (in genere attraverso il view) e li attua modificando lo stato degli altri due componenti

Questo pattern garantisce la suddivisione tra logica di business(gestita dal model) e interfaccia utente(gestia da view e controller).

Volendo applicare tale pattern alla tecnologia Java EE è possibile utlizzare le seguenti tecnologie java applicandole ai vari componenti del pattern.

Model: Tale componente può essere implementato attraverso gli entity bean, e i session bean
Controller: Esso può essere implementato mediante delle servlet.
View: Quest'ultimo attraverso jsp e/o jsf.

Gli entity bean quindi saranno un astrazione per rappresentare i dati, i session bean potranno effettuare delle operazioni sugli entity,
le servlet raccoglieranno l'input dalle jsp (utente) per effettuare richieste ai session bean e comunicare i risultati alle jsp e così via dicendo.

Esempio:

Supponiamo di dover realizzare un'applicazione web che permettare di visualizzare/modificare i dati di una tabella "utenti" presente in un db.

La tabella:Utenti
Le colonne: id, nome, cognome

Inseriamo all'interno della tabella una riga in modo da avere di default almeno un utente.

Supponiamo di utilizzare un persistence provider, ad esempio hibernate
Per tale entità(tabella utenti) è possibile creare un entity bean.
Creaimo inoltre un session bean dotato di entitymanager che realizza i metodi "edit" e "find".

  • edit - dato un entity di tipo utenti effettuera l'update rispetto al database usando il metodo merge dell'entitymanager.
  • find - dato un id, restituisce l'entity bean che rappresenta i dati in tabella che si trovano nella riga con id indicato.
  • .. è possibile implementare anche i metodi "create", "erase" per completezza.

Implementando questa porzione di progetto, si ottiene il componente "Model"

Implementiamo una servlet, (la servlet utente) che richiama mediante la resource injection, @EJB, il session bean.
Quindi dalla servlet richiamando il model e usando il metodo find(1) è possibile ottenere il corrispettivo entity contente i dati dell'utente con id = 1;

Se invece la servlet riceve i parametri GET o POST "id", "nome" e "cognome" allora effettuerà l'aggiornamento sul db, creando un nuovo entity con i dati passati tramite parametri http e richiamando il metodo edit del session bean.
(Nota che quando gli entity abbandonano le componenti ejb, ovvero vengo usati ad esempio, da componenti web, entrano nello stato un-managed..)

La servlet in questo caso realizza il controller.

La servlet in questione setta nell'oggetto request l'attributo "utenti" settando l'istanza utente ottenuta dal session bean e usando un RequestDispatcher effettua un forward verso una jsp che si occupa di mostrare una form html tale da permettere la lettura e la modifica dei dati dell'utente.
La modifica avverà richiamando la servlet utenti di partenza passando opportunamente i rispettivi valori.

Questo breve articolo non ha la presunzione di essere esaustivo, in quanto entrano in gioco diversi concetti e tecnologie.. può comunque costituire punto di partenze per un approccio a MVC  a Java EE.