You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: manutentore/android/architettura.md
+32-11Lines changed: 32 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,29 +17,50 @@ nav_order: 3
17
17
{:toc}
18
18
</details>
19
19
20
-
L'architettura scelta per l'applicazione mobile è il MVVM (Model View ViewModel).
21
-
Questa architetura è ottima per separare logica da presentazione, ma non solo, è particolarmente utile per gestire con efficacia e scalabilità le chiamate API.
22
-
Ogni funzionalità infatti segue questa architettura, con alcune aggiunte per soddisfare le necessità intrinseche ad ogni funzionalità.
23
-
24
-
Questo si denota dal nostro diagramma dei package:
20
+
## Diagramma dei pacchetti
21
+
Vediamo qui il nostro diagramma dei package:
25
22
26
23

27
24
28
-
Il package "ui" gestiscono i file della view e del viewmodel, il package "data" gestisce il model e il package "services" contiene le interfacce API.
29
-
Invece il package "res" contiene tutti i file xml e png per gestire l'aspetto e le icone dell'applicazione.
25
+
I package all'interno di "ui" gestiscono i file della View e del Viewmodel e eventuali altre classi.
26
+
Il package "data" gestisce il Model con le sue data class e le repositories.
27
+
Il package "services" contiene le interfacce API, il NetworkClient e le data class per le risposte del server.
28
+
Infine il package "res" contiene tutti i file xml e png per gestire l'aspetto, la navigazione e le icone dell'applicazione.
30
29
31
-
Nello specifico quindi ogni funzionalità ricrea il MVVM, come descritto in questo diagramma delle classi, specifico per la funzionalità UserRooms:
30
+
## Pattern architetturale: MVVM
31
+
L'architettura scelta per l'applicazione mobile è il MVVM (Model View ViewModel).
32
+
Questa architetura è ottima per separare logica da presentazione, ma non solo, è particolarmente utile per gestire con efficacia e scalabilità le chiamate API.
33
+
Ogni funzionalità infatti segue questa architettura, a volte con alcune aggiunte per soddisfare le necessità intrinseche di ogni funzionalità.
34
+
Nello specifico quindi ogni funzionalità ricrea il MVVM, in cui si va a separare la UI dalla business logic:
35
+
- la View utilizza linguaggi di markup, nel nostro caso .xml, e si utilizza il two-way data binding per comunicare con essa.
36
+
- il ViewModel fa da intermediario tra il Model e la View grazie a LiveData. Invoca i metodi del Model per poi fornire i dati ottenuti alla View in una forma facilmente utilizzabile.
37
+
- il Model comunica con il server e contiene dati e logica di validazione.
38
+
39
+

40
+
41
+
## Diagramma delle classi
42
+
Vediamo ora un diagramma delle classi, in questo caso della funzionalità UserRooms ma utilizzato in generale da quasi tutte le pagine:
32
43
33
44

34
45
35
46
Da questo diagramma possiamo vedere come sono implementati i metodi e le classi del MVVM.
36
-
Per prima cosa viene creato il model, per gestire gli oggetti in entrata dal lato server.
47
+
Per prima cosa viene creato il Model, per gestire gli oggetti in entrata dal lato server.
37
48
La chiamata Get all'API viene fatta dall'interfaccia APIRooms, creata dalla UserRepository tramite il nostro Retrofit Builder, implementato nel file NetworkClient.
38
49
In NetworkClient vengono anche gestiti i certificati http tramite la libreria Okhttp3.
39
-
L'UserRoomsFragment gestisce assieme ai file XML la view e alla propria creazione, tramite un UserRoomsViewModelFactory, crea il nostro viewModel: UserRoomsViewModel.
50
+
L'UserRoomsFragment gestisce assieme ai file .xml la View, con cui comunica tramite data binding. Alla propria creazione, tramite un UserRoomsViewModelFactory, crea il nostro ViewModel: UserRoomsViewModel.
40
51
I dati che vengono ricevuti dal server tramite Retrofit vengono inseriti all'interno di LiveData, i quali vengono letti da UserRoomsFragment e UserRoomsViewModel tramite observers definiti nelle relative classi.
41
-
Questi observers si occupano di gestire e notificare alla view i cambiamenti agli oggetti, in modo da poter aggiornare i dati visti dall'utente nell'applicazione.
52
+
Questi observers si occupano di gestire e notificare alla View i cambiamenti agli oggetti, in modo da poter aggiornare i dati visti dall'utente nell'applicazione.
42
53
43
54
Come introdotto prima, ogni funzionalità ha dei bisogni aggiuntivi propri, in questo caso ad esempio è stato necessario implementare un UserRoomsAdapter per gestire dinamicamente gli oggetti della lista prenotazioni, implementata tramite uno standard RecyclerView.
44
55
56
+
## Espansione
57
+
Vista la natura modulare di questa applicazione è possibile estenderla in modo semplice visto che ogni pagina è indipendente dalle altre. Se si volessero aggiungere ulteriori funzionalità
58
+
è sufficiente seguire i pattern già utilizzati per le altre pagine e quindi avere:
59
+
- un file .xml all'interno del package "layout";
60
+
- creare un nuovo package all'interno di "ui", contenente almeno un Fragment ed un ViewModel che comunicano con il layout tramite data binding;
61
+
- se si desidera utilizzare API del server, creare un'interfaccia all'interno di "apis", una Repository all'interno di "repositories" ed eventuali data class all'interno di "model" e "gsonReceive".
62
+
Infine, una volta creata la nuova pagina, è possibile inserirla all'interno dei file nel package "navigation" per renderla accessibile da altre pagine tramite la navigazione standard di Android.
63
+
64
+
Seguendo la struttura dei package appena definita, è anche possibile aggiungere test di unità delle rispettive classi all'interno della cartella "com.sweven.blockcovid (test)".
Copy file name to clipboardExpand all lines: manutentore/android/contribuzione.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,8 +23,10 @@ Come indicato all'interno della sezione [Contributing del README](https://github
23
23
24
24
Modifiche al codice sorgente (per ogni _branch_ e per _Pull Request_) scatenano i processi di [_continuous-integration_](/glossario#continuous-integration) attraverso _GitHub Actions_, seguendo due workflow (`.github/workflows`):
25
25
-`build-app`
26
-
- Compila il codice
26
+
- Compila il codice;
27
27
-`detekt-analysis`
28
-
- Esegue un'analisi statica del codice
28
+
- Esegue un'analisi statica del codice;
29
+
-`code-coverage`
30
+
- Calcola la code coverage e la carica su [Codecov](https://codecov.io/).
Copy file name to clipboardExpand all lines: manutentore/android/tecnologie.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,15 +25,15 @@ Android SDK fornisce le librerie API e gli strumenti per sviluppatori necessari
25
25
26
26
- - -
27
27
28
-
### Kotlin 1.4.32
28
+
### Kotlin 1.5.20
29
29
30
30
Kotlin è un linguaggio di programmazione general purpose, multi-paradigma, open source sviluppato dall'azienda di software JetBrains. Kotlin si basa sulla JVM (Java Virtual Machine) e dal 2019 viene utilizzato da Google per lo sviluppo Android.
Gradle è uno strumento di automazione della build open source progettato per essere abbastanza flessibile da creare quasi tutti i tipi di software. Gradle viene eseguito sulla JVM e per utilizzarlo è necessario disporre di un Java Development Kit (JDK)
Copy file name to clipboardExpand all lines: manutentore/android/testing.md
+13-4Lines changed: 13 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,13 +20,22 @@ nav_order: 4
20
20
## Test di unità
21
21
I test di unità sono stati sviluppati utilizzando Junit e Mockito.
22
22
Per eseguirli tramite Android Studio è sufficiente fare tasto destro sul file di test all'interno della cartella "com.sweven.blockcovid (test)" e cliccare su "Run Test with Coverage".
23
+
Alternativamente è possibile eseguirli tramite JaCoCo tramite il comando:
24
+
```sh
25
+
./gradlew clean test jacocoTestReport
26
+
```
27
+
dalla root del progetto. Verrà generato un report con il code coverage all'interno della cartella "/app/build/reports/jacoco/jacocoTestReport/html/index.html".
23
28
24
29
## Test di sistema
25
-
I test di sistema invece sono stati sviluppati tramite Espresso.
26
-
Per eseguirli tramite Android Studio è sufficiente fare tasto destro sul file di test all'interno della cartella "com.sweven.blockcovid (androidTest)" e cliccare su "Run Test with Coverage".
27
-
Prima di eseguire questi test è necessario fare il run sul dispositivo mobile o sulla macchina virtuale e assicurarsi di essere sulla pagina di login. Inoltre è necessario disabilitare le animazioni del dispositivo Android tramite le Opzioni sviluppatore.
30
+
I test di sistema invece sono stati sviluppati tramite Espresso, situati nella cartella "/tests".
31
+
Per eseguirli tramite Android Studio è sufficiente copiarli all'interno della cartella "androidTest", fare tasto destro sul file di test e cliccare su "Run Test with Coverage".
32
+
Prima di eseguire questi test è necessario fare il run sul dispositivo mobile o sulla macchina virtuale e assicurarsi di essere sulla pagina di login.
33
+
Inoltre è necessario disabilitare le animazioni del dispositivo Android tramite le Opzioni sviluppatore.
28
34
29
35
## GitHub Actions
30
-
Il servizio di [Continuous Integration](/glossario#continuous-integration) che è stato deciso di utilizzare è GitHub Actions, fornito appunto da GitHub. Questo permette di creare dei workflow personalizzati, ovvero dei processi automatici creati sulla base delle proprie esigenze. Ciò ha l'obiettivo di automatizzare il ciclo di vita di sviluppo del software grazie ad un ampia gamma di strumenti e servizi.
36
+
Il servizio di [Continuous Integration](/glossario#continuous-integration) che è stato deciso di utilizzare è GitHub Actions, fornito appunto da GitHub.
37
+
Questo permette di creare dei workflow personalizzati, ovvero dei processi automatici creati sulla base delle proprie esigenze.
38
+
Ciò ha l'obiettivo di automatizzare il ciclo di vita di sviluppo del software grazie ad un ampia gamma di strumenti e servizi.
39
+
La code coverage viene automaticamente calcolata ed aggiornata ad ogni push su GitHub tramite [Codecov](https://codecov.io/).
Copy file name to clipboardExpand all lines: manutentore/index.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,16 +15,16 @@ Lo scopo del Manuale Manutentore è presentare le procedure di installazione e s
15
15
16
16
Il prodotto BlockCOVID permette di tracciare l'utilizzo di postazioni e stanze di lavoro all'interno di aziende.
17
17
Il progetto si articola su 3 moduli:
18
-
-[Server](/manutentore/server): espone le API utilizzate dai client Android e Web, fornisce la business logic e permette di persistere i dati su database e servizio blockchain,
19
-
-[Android](/manutentore/android): permette ai dipendenti di prenotare ed utilizzare le postazioni di lavoro, e agli addetti alle pulizie di segnalare le stanze sanificate,
18
+
-[Server](/manutentore/server): espone le API utilizzate dai client Android e Web, fornisce la business logic e permette di persistere i dati su database e servizio blockchain;
19
+
-[Android](/manutentore/android): permette ai dipendenti di prenotare ed utilizzare le postazioni di lavoro, e agli addetti alle pulizie di segnalare le stanze sanificate;
20
20
-[Web](/manutentore/web): mette a disposizione degli amministratori una piattaforma web per reperire informazioni sull'utilizzo delle postazioni, con possibilità di creare e modificare stanze e di generare i report che verranno aggiunti alla blockchain.
21
21
22
22
## Tipologie di utenti
23
23
24
24
All'interno del progetto vengono considerate 3 tipologie di utenti (si noti che ogni account può essere associato a più di una tipologia di utente):
25
-
-**User**: generalmente associato ad un dipendente, permette di effettuare prenotazioni ed utilizzare le postazioni
26
-
-**Cleaner**: tipologia di utente utilizzato dagli addetti alle pulizie per segnalare la sanificazione delle stanze
27
-
-**Admin**: utenti che hanno permessi di modifica di stanze e account, nonché di visualizzazione di tutte le prenotazioni presenti nel sistema
25
+
-**User**: generalmente associato ad un dipendente, permette di effettuare prenotazioni ed utilizzare le postazioni:
26
+
-**Cleaner**: tipologia di utente utilizzato dagli addetti alle pulizie per segnalare la sanificazione delle stanze:
27
+
-**Admin**: utenti che hanno permessi di modifica di stanze e account, nonché di visualizzazione di tutte le prenotazioni presenti nel sistema.
0 commit comments