Refactor architettura itgmobile
This commit is contained in:
parent
2bcc122bf1
commit
59335ae3f7
3 changed files with 116 additions and 37 deletions
|
@ -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",
|
||||
|
|
BIN
italian.pdf
BIN
italian.pdf
Binary file not shown.
123
main.tex
123
main.tex
|
@ -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}
|
||||
|
|
Reference in a new issue