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, @online{guacdoc:arch,
title = {Guacamole Manual, Chapter 1. Implementation and architecture}, title = "Guacamole Manual, Chapter 1. Implementation and architecture",
author = {The Apache Software Foundation}, author = "The Apache Software Foundation",
url = "https://guacamole.apache.org/doc/gug/guacamole-architecture.html", 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, @online{guacdoc:api,
title = {\textit{API Documentation}}, title = {\textit{API Documentation} -- Apache Guacamole},
author = {Apache Guacamole}, author = "The Apache Software Foundation",
url = "https://guacamole.apache.org/api-documentation/", 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, @online{wiki:rest,
author = "Wikipedia", author = "Wikipedia",

Binary file not shown.

123
main.tex
View file

@ -23,11 +23,11 @@
% document metadata % document metadata
\begin{it} \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} \def\mdsubtitle{Sviluppo di applicazioni multipiattaforma per dispositivi mobili}
\end{it} \end{it}
\begin{en} \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} \def\mdsubtitle{Multiplatform mobile application development}
\end{en} \end{en}
\def\mdauthor{Claudio Maggioni} \def\mdauthor{Claudio Maggioni}
@ -80,14 +80,22 @@
\begin{it} \begin{it}
\section{Informazioni generali sul lavoro svolto} \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 A partire dal giorno 19/10/2017, collaboro con l'azienda \textit{Agomir
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 S.p.A}\cite{agomir:website} (produttrice di software, sistemi e servizi per
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 piccole e medie imprese) svolgendo un'attività di alternanza scuola-lavoro
Cordova}\footnote{Apache Cordova: \url{https://cordova.apache.org/}}. 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 Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al
alla piattaforma \`e possibile utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente tali posto di usare API e meccanismi legati alla piattaforma \`e possibile
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. 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} \end{it}
\begin{en} \begin{en}
\section{General information about the work done} \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é 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. 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} \end{it}
\begin{en} \begin{en}
\section{Projects management} \section{Projects management}
@ -120,13 +128,13 @@
\section{Il progetto principale: \textit{InteGRa Mobile}} \section{Il progetto principale: \textit{InteGRa Mobile}}
Questa applicazione, una volta completata, dovrebbe permettere ad utenti in mobilità di interfacciarsi con alcune 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} \begin{description}
\item[Ordini cliente] per registrare ordini di prodotti a clienti; \item[Ordini cliente] per registrare ordini di prodotti a clienti;
\item[Soggetti] per consultare informazioni anagrafiche di clienti e fornitori; \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} \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[Magazzini] gestire e inventariare scorte in magazzino. \item[Magazzini] gestire e inventariare scorte in magazzino.
\end{description} \end{description}
@ -163,20 +171,57 @@
\end{figure} \end{figure}
\begin{it} \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: Nella figura \ref{fig:itgmobliearch} si può notare come l'insieme dei
\begin{itemize} componenti software all'interno del progetto siano organizzati e comunichino
\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. tra loro. Tale architettura è stata realizzata da me, basandosi
Nello specifico, i dati in input vengono trasmessi come \texttt{application/x-www-form-urlencoded} mentre sull'esperienza acquisita con il progetto \textit{InteGRa.Service}. Segue
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; una spiegazione sintetica (organizzata in punti) del diagramma.
\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}; \begin{itemize}
\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} \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} \end{it}
\begin{en} \begin{en}
\blindtext \blindtext
\end{en} \end{en}
\begin{it}
\subsubsection{\textit{restaurant} -- lato server}
\end{it}
\begin{it}
\subsubsection{\textit{restaurant} -- lato client}
\end{it}
\begin{it} \begin{it}
\subsection{Stato del progetto} \subsection{Stato del progetto}
\end{it} \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: Le fasi del progetto, di cui date di inizio e fine sono state specificate nel diagramma in figura \ref{fig:ganttitgmob}, sono:
\begin{description} \begin{description}
\item[Progettazione] delineazione delle funzionalità da implementare nell'applicazione
e prime bozze dell'interfaccia utente; \item[Progettazione] delineazione delle funzionalità da implementare
// \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; nell'applicazione e prime bozze dell'interfaccia utente;
\item[Implementazione sezioni] creazione di interfaccia e logica per le funzionalit\'a previste, cio\'e:
\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} \begin{itemize}
\item Magazzini; \item Magazzini;
\item Agenda; \item Agenda;
\item Soggetti; \item Soggetti;
\item Ordini cliente; \item Ordini cliente;
\end{itemize} \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} \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; \item[Test per \textit{restaurant}] messa alla prova dei cambiamenti fatti;
\end{description} \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} \end{it}
\begin{en} \begin{en}
\subsection{Project phases} \subsection{Project phases}