\section{Progettazione}

Nella fase iniziale di progettazione, invece che iniziare direttamente con la stesura di un diagramma UML delle Classi si è ritenuto più comodo sviluppare prima l'idea su carta disegnando un semplice diagramma ER (Entity Relationship).

\begin{figure}[h!]
  \centering
  \includegraphics[scale=0.6]{img/logo.png}
  \caption{Diagramma ER}
  \label{fig:er}
\end{figure}

Una volta stesa una bozza definitva e chiara sulle entità, relazioni e relativi attributi da definire si è passati a trasporre in una forma più dettagliata e più comoda per noi da tenere come riferimento, ossia un EER (Enhaced Entity Relationship) disegnato con il tool MySQL Workbench.

\begin{figure}[h!]
  \centering
  \includegraphics[scale=0.6]{img/logo.png}
  \caption{Diagramma EER}
  \label{fig:eer}
\end{figure}

\begin{figure}[h!]
  \centering
  \includegraphics[scale=0.6]{img/logo.png}
  \caption{Diagramma delle Classi}
  \label{fig:classi}
\end{figure}

\section{Struttura}

L'applicazione è strutturata in diversi package con ognuno funzionalità specifiche:

\begin{itemize}
  \item \textbf{com.mivan.model:} In questo package sono presenti tutte le entità del modello dati dell'applicazione, implementate in classi come mostrate in figura \ref{fig:classi}. Per gestire la persistenza dei dati di un database relazionere, per tali classi sono state utilizzate le annotazioni delle JPA (Java Persistence API).
  \item \textbf{com.mivan.repository:} In questo package sono implementate le query per l'interrogazione al database.
  \item \textbf{com.mivan.exception:} In questo package sono contenute le classi che gestiscono le eccezioni generate dalle interrogazioni al database.
\end{itemize}

\section{Test}

Per verificare l'effettivo funzionamento del programma sono stati sviluppati dei test d'integrazione, posizionati all'interno della cartella \code{mivan/src/test/java/}.\newline
Per i JUnit test volti a verificare la corretta esecuzione delle operazioni CRUD (Create, Read, Update, Delete) è stato fatto uso dell'engine H2, il quale consente di eseguire tali operazioni su un database temporaneo caricato in memoria (RAM). Tale approccio consente arginare del tutto il problema di intaccare il database persistente dai dati fittizzi dei test.
