Refactor architettura itgmobile

This commit is contained in:
Claudio Maggioni 2018-04-30 17:18:49 +02:00
parent 2bcc122bf1
commit 59335ae3f7
3 changed files with 116 additions and 37 deletions

View file

@ -1,14 +1,32 @@
@online{guacdoc:arch,
title = {Guacamole Manual, Chapter 1. Implementation and architecture},
author = {The Apache Software Foundation},
title = "Guacamole Manual, Chapter 1. Implementation and architecture",
author = "The Apache Software Foundation",
url = "https://guacamole.apache.org/doc/gug/guacamole-architecture.html",
note = "[Online; in data 9-aprile-2018, traduzione propria]"
note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]"
}
@online{ionic:website,
title = "Build Amazing Native Apps and Progressive Web Apps with Ionic Framework and Angular",
author = "Ionic (precedentemente Drifty Co.)",
url = "https://ionicframework.com/framework",
note = "[Online; in data 30-aprile-2018]"
}
@online{agomir:website,
title = "Agomir S.p.A. - Software - Sistemi - Servizi",
author = "Agomir S.p.A.",
url = "https://www.agomir.com",
note = "[Online; in data 30-aprile-2018]"
}
@online{guacdoc:api,
title = {\textit{API Documentation}},
author = {Apache Guacamole},
title = {\textit{API Documentation} -- Apache Guacamole},
author = "The Apache Software Foundation",
url = "https://guacamole.apache.org/api-documentation/",
note = "[Online; in data 9-aprile-2018, traduzione propria]"
note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]"
}
@online{cordova:website,
title = "Apache Cordova",
author = "The Apache Software Foundation",
url = "https://cordova.apache.org",
note = "[Online; in data 30-aprile-2018]"
}
@online{wiki:rest,
author = "Wikipedia",

Binary file not shown.

123
main.tex
View file

@ -23,11 +23,11 @@
% document metadata
\begin{it}
\def\mdtitle{Alternanza scuola-lavoro estesa presso Agomir S.p.A.}
\def\mdtitle{Alternanza scuola-lavoro estesa presso \textit{Agomir S.p.A.}}
\def\mdsubtitle{Sviluppo di applicazioni multipiattaforma per dispositivi mobili}
\end{it}
\begin{en}
\def\mdtitle{Extended school internship at Agomir S.p.A.}
\def\mdtitle{Extended school internship at \textit{Agomir S.p.A.}}
\def\mdsubtitle{Multiplatform mobile application development}
\end{en}
\def\mdauthor{Claudio Maggioni}
@ -80,14 +80,22 @@
\begin{it}
\section{Informazioni generali sul lavoro svolto}
A partire dal giorno 19/10/2017, collaboro con l'azienda Agomir S.p.A\footnote{Agomir S.p.A.: \url{https://www.agomir.com/}}, che produce software, sistemi e servizi per
piccole e medie imprese, svolgendo un'attività di alternanza scuola-lavoro estesa con cadenza settimanale (nello specifico giovedì e venerdì pomeriggio). Mi occupo di sviluppo software di tipo gestionale, nello specifico di applicazioni per smartphone
multipiattaforma (cioè compatibili sia con Android che con iOS) utilizzando strumenti come \textit{Ionic Framework}\footnote{Ionic Framework: \url{https://ionicframework.com/}} e \textit{Apache
Cordova}\footnote{Apache Cordova: \url{https://cordova.apache.org/}}.
A partire dal giorno 19/10/2017, collaboro con l'azienda \textit{Agomir
S.p.A}\cite{agomir:website} (produttrice di software, sistemi e servizi per
piccole e medie imprese) svolgendo un'attività di alternanza scuola-lavoro
estesa con cadenza settimanale (giovedì e venerdì pomeriggio). Mi occupo di
sviluppo software di tipo gestionale, nello specifico di applicazioni per
smartphone multipiattaforma (cioè compatibili sia con Android che con iOS)
utilizzando strumenti come \textit{Ionic Framework}\cite{ionic:website} e
\textit{Apache Cordova}\cite{cordova:website}.
Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al posto di usare API e meccanismi legati
alla piattaforma \`e possibile utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente tali
applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide, ma questo aspetto è meno rilevante in contesti gestionali come quelli affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o all'elaborazione real-time.
Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al
posto di usare API e meccanismi legati alla piattaforma \`e possibile
utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente
tali applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide,
ma questo aspetto è meno rilevante in contesti gestionali come quelli
affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o
all'elaborazione real-time.
\end{it}
\begin{en}
\section{General information about the work done}
@ -108,7 +116,7 @@
Nonostante non abbia controllo totale \`e comunque mia responsabilità fare stime orarie sul lavoro da svolgere nonché
definire passi e \textit{milestone} per i vari progetti.
Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile} ho gestito momenti di formazione ad alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso.
Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile} ho coordinato momenti di formazione ad alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso.
\end{it}
\begin{en}
\section{Projects management}
@ -120,13 +128,13 @@
\section{Il progetto principale: \textit{InteGRa Mobile}}
Questa applicazione, una volta completata, dovrebbe permettere ad utenti in mobilità di interfacciarsi con alcune
funzioni del prodotto ERP di punta di Agomir: il gestionale \textit{InteGRa}\footnote{InteGRa ERP: \url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere alle seguenti sezioni:
funzioni del prodotto ERP di punta di Agomir: il gestionale
\textit{InteGRa}\footnote{Sito internet di InteGRa ERP: \url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere alle seguenti sezioni:
\begin{description}
\item[Ordini cliente] per registrare ordini di prodotti a clienti;
\item[Soggetti] per consultare informazioni anagrafiche di clienti e fornitori;
\item[Agenda] per consultare e aggiungere eventi nel calendario presente nell'ERP, il quale si pu\`o integrare con \textit{Outlook}
\footnote{Microsoft Outlook: \url{https://products.office.com/it-it/outlook}};
\item[Agenda] per consultare e aggiungere eventi nel calendario presente nell'ERP, il quale si pu\`o integrare con \textit{Outlook};
\item[Magazzini] gestire e inventariare scorte in magazzino.
\end{description}
@ -163,20 +171,57 @@
\end{figure}
\begin{it}
Nella figura \ref{fig:itgmobliearch} si può notare come l'insieme dei componenti software all'interno del progetto siano organizzati e comunichino tra loro. Nel dettaglio:
\begin{itemize}
\item L'applicazione non comunica direttamente con il gestionale, ma tramite una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario.
Nello specifico, i dati in input vengono trasmessi come \texttt{application/x-www-form-urlencoded} mentre
i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le sessioni vengono identificate con un token presente nella query string di ciascuna richiesta;
\item Tale componente server è in grado di effettuare autonomamente query \textsc{SQL} al database del gestionale per recuperare velocemente informazioni aventi una struttura dati semplice;
\item Nel caso sia necessario interagire con record complessi, \textit{InteGRaREST} comunica direttamente con \textit{InteGRa} attraverso chiamate \textsc{SOAP}\cite{wiki:soap};
\item La comunicazione tra \textit{InteGRaREST} e \textit{InteGRa Mobile} avviene tramite \textit{restaurant}, libreria che implementa e rende standard il protocollo di comunicazione e sincronizzazione dati.
\end{itemize}
Nella figura \ref{fig:itgmobliearch} si può notare come l'insieme dei
componenti software all'interno del progetto siano organizzati e comunichino
tra loro. Tale architettura è stata realizzata da me, basandosi
sull'esperienza acquisita con il progetto \textit{InteGRa.Service}. Segue
una spiegazione sintetica (organizzata in punti) del diagramma.
\begin{itemize}
\item L'applicazione non comunica direttamente con il gestionale, ma tramite
una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato
server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario.
\item Tale componente è una Java WebApplication che utilizza una libreria
sviluppata internamente (chiamata \textit{restaurant}) per offrire le
servlet accessibili al client e per interagire con il database di
\textit{InteGRa}, una normale istanza di \textit{PostgreSQL}.
\item Nella fase di comunicazione tramite HTTP, i dati in input vengono
trasmessi come \texttt{application/x-www-form-urlencoded} mentre
i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le
sessioni vengono identificate con un token presente come parametro nella
query string di ciascuna richiesta;
\item \textit{InteGRaREST} effettua autonomamente query \textsc{SQL} al
database per recuperare velocemente informazioni aventi
struttura dati e logiche di memorizzazione semplici;
\item Nel caso sia necessario interagire con record complessi,
\textit{InteGRaREST} comunica con \textit{InteGRa} attraverso
chiamate \textsc{SOAP}\cite{wiki:soap};
\item \textit{InteGRa Mobile}, l'applicazione per dispositivi mobili, comunica
con \textit{InteGRaREST} grazie a una versione client di \textit{restaurant},
in grado di gestire (in modo limitato) operazioni eseguite in mancanza di
connessione alla rete.
\end{itemize}
\end{it}
\begin{en}
\blindtext
\end{en}
\begin{it}
\subsubsection{\textit{restaurant} -- lato server}
\end{it}
\begin{it}
\subsubsection{\textit{restaurant} -- lato client}
\end{it}
\begin{it}
\subsection{Stato del progetto}
\end{it}
@ -247,24 +292,40 @@
Le fasi del progetto, di cui date di inizio e fine sono state specificate nel diagramma in figura \ref{fig:ganttitgmob}, sono:
\begin{description}
\item[Progettazione] delineazione delle funzionalità da implementare nell'applicazione
e prime bozze dell'interfaccia utente;
// \item[Implementazione \textit{restaurant}] implementazione della libreria, su cui si basano tutte le sezioni del programma. Vista l'importanza di questo componente, gli sviluppi vengono continuati in parallelo con l'implementazione delle sezioni;
\item[Implementazione sezioni] creazione di interfaccia e logica per le funzionalit\'a previste, cio\'e:
\item[Progettazione] delineazione delle funzionalità da implementare
nell'applicazione e prime bozze dell'interfaccia utente;
\item[Implementazione \textit{restaurant}] implementazione della libreria, su
cui si basano tutte le sezioni del programma. Vista l'importanza di questo
componente, gli sviluppi vengono continuati in parallelo con
l'implementazione delle sezioni;
\item[Implementazione sezioni] creazione di interfaccia e logica per le
funzionalit\'a previste, cio\'e:
\begin{itemize}
\item Magazzini;
\item Agenda;
\item Soggetti;
\item Ordini cliente;
\end{itemize}
\item[Test per le sezioni] messa alla prova degli algoritmi e della UI per efficacia ed efficienza, nonch\'e eventuali correzioni;
\item[Rifinimento \textit{restaurant}] messa alla prova delle scelte architetturali e algoritmi usati nella libreria e rifinimento di essi; Fase divisa in:
\item[Test per le sezioni] messa alla prova degli algoritmi e della UI per
efficacia ed efficienza, nonch\'e eventuali correzioni;
\item[Rifinimento \textit{restaurant}] messa alla prova delle scelte
architetturali e algoritmi usati nella libreria e rifinimento di essi;
Fase divisa in:
\begin{description}
\item[Miglioramento architettura] analisi del protocollo per individuare punti di debolezza e possibili ottimizzazioni;
\item[Miglioramento architettura] analisi del protocollo per individuare
punti di debolezza e possibili ottimizzazioni;
\item[Test per \textit{restaurant}] messa alla prova dei cambiamenti fatti;
\end{description}
\item[Finalizzazione] task finali del progetto, tra cui branding, operazioni pre-rilascio, e gestione di eventuali personalizzazioni richieste dai clienti.
\end{description}
\item[Finalizzazione] task finali del progetto, tra cui branding, operazioni
pre-rilascio, e gestione di eventuali personalizzazioni richieste dai clienti.
\end{description}
\end{it}
\begin{en}
\subsection{Project phases}