SlideShare a Scribd company logo
Università degli Studi di Salerno
Dipartimento di Informatica
Basi Dati 2
MondoDB# MyTask
Pasquale Matrone
MyTask
Applicazione in Node.js
che usa il DBMS
MongoDB per la gestione
dei task (o «storie») di un
progetto (o «sprint»)
DESCRIZIONE
Overview funzionalità applicazione
Overview funzionalità applicazione
Ruoli App
RUOLO DESCRIZIONE
Sviluppatore • Visualizza, crea, assegna, si
autoassegna task
Project Manager • Visualizza, crea, assegna, si
autoassegna task
• Visualizza, crea progetti
Manager • Visualizza, crea, assegna, si
autoassegna task
• Visualizza, crea progetti
• Visualizza i «numeri» di un
progetto
• L’applicazione prevede tre tipi di utente (ruoli):
Sviluppatore, Project Manager e Manager
Overview funzionalità applicazione
MyTask | 1/4
• Principali funzionalità App:
• Registrazione nuovo utente, login, logout
• Creazione nuovo task
• Visualizzazione task (assegnati, creati, assegnati e
creati)
• Lavagna task per l’auto-assegnamento
• Storico task (task già completati)
• Ricerca testuale dei task (pattern di ricerca testuale)
• Creazione nuovo progetto
• Visualizzazione progetti (attivi e non attivi)
• Visualizzazione dei «numeri» di un progetto
• Numero di task per il progetto X in stato Y
assegnati a Z
Overview funzionalità applicazione
MyTask | 2/4
• Registrazione nuovo utente: tre posizioni aziendali per i
diversi ruoli nell’app (sviluppatore, pm, manager)
Overview funzionalità applicazione
MyTask | 3/4
• Lista Task Assegnati e Creati, Assegnati, Creati, Lavagna,
Storico
Overview funzionalità applicazione
MyTask | 4/4
• Nuovo Task: tutti i campi, tranne Commenti, sono
obbligatori
Principali Tecnologie
Node.js
MongoDB
Handlebars
Node.js
MongoDB
Handlebars
Principali Tecnologie
• Node.js è un runtime system open source
multipiattaforma orientato agli eventi per l'esecuzione
di codice JavaScript
• Un runtime system è un software che fornisce i
servizi necessari all'esecuzione di un programma
• Node.js consente di utilizzare JavaScript anche per
scrivere codice da eseguire lato server
• Ad esempio, per la produzione del contenuto delle
pagine web dinamiche prima che la pagina venga
inviata al browser dell'utente
Principali Tecnologie
Node.js | 1/3
• Node.js permette quindi di implementare il cosiddetto
paradigma «JavaScript everywhere»
• npm (abbreviazione di Node Package Manager) è un
gestore di pacchetti per il linguaggio di
programmazione JavaScript
• È il gestore di pacchetti predefinito di Node.js
• Consiste in un client da linea di comando, chiamato
anch’esso npm, e un database online di pacchetti
pubblici e privati, chiamato npm registry
• Di seguito, un elenco dei pacchetti usati per
l’implementazione dell’app MyTask
Principali Tecnologie
Node.js | 2/3
Principali Tecnologie
Node.js | 3/3
PACCHETTO DESCRIZIONE
Mongoose • Fornisce una soluzione semplice e
basata su schema per modellare i
dati dell’applicazione
• Include il casting di tipo integrato, la
validazione e la costruzione di query
Express • Framework per applicazioni web per
Node.js
Express-session • Crea un middleware di sessione
Connect-flash • Area speciale della sessione per
memorizzare i messaggi
Passport • Middleware di autenticazione
Bcrypt • Funzione crittografica di hash
Body-parser • Analizzare i body delle richieste in
arrivo (proprietà req.body)
Principali Tecnologie
Node.js | 3/3
PACCHETTO DESCRIZIONE
Mongoose • Fornisce una soluzione semplice e
basata su schema per modellare i
dati dell’applicazione
• Include il casting di tipo integrato, la
validazione e la costruzione di query
Express • Framework per applicazioni web per
Node.js
Express-session • Crea un middleware di sessione
Connect-flash • Area speciale della sessione per
memorizzare i messaggi
Passport • Middleware di autenticazione
Bcrypt • Funzione crittografica di hash
Body-parser • Analizzare i body delle richieste in
arrivo (proprietà req.body)
Maggiori dettagli in seguito…
Principali Tecnologie
Node.js | 3/3
PACCHETTO DESCRIZIONE
Mongoose • Fornisce una soluzione semplice e
basata su schema per modellare i
dati dell’applicazione
• Include il casting di tipo integrato, la
validazione e la costruzione di query
Express • Framework per applicazioni web per
Node.js
Express-session • Crea un middleware di sessione
Connect-flash • Area speciale della sessione per
memorizzare i messaggi
Passport • Middleware di autenticazione
Bcrypt • Funzione crittografica di hash
Body-parser • Analizzare i body delle richieste in
arrivo (proprietà req.body)
• Per Routing si intende determinare come
un’applicazione risponde ad una richiesta
client per un endpoint particolare
• Un endpoint è formato da
1. un URI (o percorso)
2. un metodo di richiesta HTTP
specifico (GET, POST, ecc)
Client
Server
Principali Tecnologie
Handlebars
Node.js
MongoDB
• MongoDB è un DBMS non relazionale, orientato ai
documenti
• Il nome deriva da «humongous», enorme
• Classificato come un database di tipo NoSQL, MongoDB
si allontana dalla struttura tradizionale basata su
tabelle dei database relazionali in favore di documenti
in stile JSON con schema dinamico (BSON), rendendo
l'integrazione di dati di alcuni tipi di applicazioni più
facile e veloce
Principali Tecnologie
MongoDB| 1/3
• Secondo db-engines.com, a gennaio 2022 MongoDB è
al 5º posto della classifica dei database più popolari del
mondo e al 1º posto dei database NoSQL
• Alcuni degli utilizzatori più popolari di MongoDB sono
• SAP
• Forbes
• The New York Times
• Sourceforge
• CERN
• eBay
• …
Principali Tecnologie
MongoDB| 2/3
Principali Tecnologie
MongoDB| 3/3
MongoDBCompass
GUI per MongoDB
Principali Tecnologie
MongoDB| Mongoose | 1/3
PACCHETTO DESCRIZIONE
Mongoose • Fornisce una soluzione semplice e
basata su schema per modellare i
dati dell’applicazione
• Include il casting di tipo integrato, la
validazione e la costruzione di query
Express • Framework per applicazioni web per
Node.js
Express-session • Crea un middleware di sessione
Connect-flash • Area speciale della sessione per
memorizzare i messaggi
Passport • Middleware di autenticazione
Bcrypt • Funzione crittografica di hash
Body-parser • Analizzare i body delle richieste in
arrivo (proprietà req.body)
Principali Tecnologie
MongoDB| Mongoose | 2/3
Mongoose: libreria JavaScript orientata agli oggetti, che crea una
connessione tra MongoDB ed Express
Principali Tecnologie
MongoDB| Mongoose | 3/3
Mongoose «semplifica» lo sviluppo con
MongoDB
Ecco perché esiste ed ho utilizzato Mongoose
Principali Tecnologie
MongoDB| Mongoose | 3/3
Mongoose «semplifica» lo sviluppo con
MongoDB
Ecco perché esiste ed ho utilizzato Mongoose
Principali Tecnologie
MongoDB| Mongoose | 3/3
Approfondiamo le caratteristiche
principali di Mongoose
3
4
Query
Indici
1
2
Schema
Modello
Caratteristiche Mongoose
3
4
Query
Indici
1
2
Schema
Modello
Caratteristiche Mongoose
Principali Tecnologie
MongoDB| Mongoose | Schema
• Ogni schema mappa una collezione MongoDB e
definisce la forma dei documenti all'interno di quella
collezione
• Definisce il tipo di ogni proprietà
• String
• Number
• Date
• Boolean
• Array
• …
3
4
Query
Indici
1
2
Schema
Modello
Caratteristiche Mongoose
Principali Tecnologie
MongoDB| Mongoose | Modello
• I modelli sono responsabili della creazione e della
lettura dei documenti dal sottostante database
MongoDB
• I modelli sono definiti a partire da uno schema
• Il primo argomento della funzione
mongoose.model() è il nome singolare della
collezione
• Un'istanza di un modello è chiamata documento
3
4
Query
Indici
1
2
Schema
Modello
Caratteristiche Mongoose
Principali Tecnologie
MongoDB| Mongoose | Query
• Alcune funzioni statiche di un modello Mongoose per le
operazioni CRUD (create, read, update, delete) sono le
seguenti:
• Model.deleteMany()
• Model.deleteOne()
• Model.find()
• Model.findById()
• Model.findByIdAndDelete()
• Model.findByIdAndUpdate()
• E tante altre…
• Ciascuna di queste funzioni restituisce un oggetto
Query di tipo Mongoose
Principali Tecnologie
MongoDB| Mongoose | Query
• Alcune funzioni statiche di un modello Mongoose per le
operazioni CRUD (create, read, update, delete) sono le
seguenti:
• Model.deleteMany()
• Model.deleteOne()
• Model.find()
• Model.findById()
• Model.findByIdAndDelete()
• Model.findByIdAndUpdate()
• E tanta altre…
• Ciascuna di queste funzioni restituisce un oggetto
Query di tipo Mongoose
SEMPLICE ESEMPIO
/* Trovare i libri intitolati «I promessi sposi» */
Libro.find({titolo: "I promessi sposi"}, function
(err, docs){
if(err){
return console.log(err);
}
console.log('Found documents filtered by { autore:
"I promessi sposi" } =>', docs);
});
3
4
Query
Indici
1
2
Schema
Modello
Caratteristiche Mongoose
Principali Tecnologie
MongoDB| Mongoose | Indici
• Oltre all’indice di default sul campo «_id», MongoDB
permette di creare indici su altre proprietà dello
schema
• In questo modo, i documenti, possono essere
indicizzati in base alle nostre proprietà per un
accesso più veloce
• Possiamo anche creare indici composti da più di
una proprietà (compound indexes)
• ModelSchema.index()
//Indici custom per le mie query
taskSchema.index({utente: 1});
taskSchema.index({assegnatario: 1});
Node.js
MongoDB
Handlebars
Principali Tecnologie
• Handlebars è un semplice linguaggio di template
• Un «espressione handlebars» viene sostituita con i
valori di un oggetto di input
• A completare il pacchetto delle tecnologie front-end
utilizzate nell’applicazione MyTask, troviamo
• HTML
• CSS
• Bootstrap
• Componenti interfaccia sito web
• jQuery
• Libreria JavaScript «feature-rich»
Principali Tecnologie
Handlebars
Principali Tecnologie
Considerazioni
Node.js
MongoDB
Handlebars
• Node.js, Handlebars, ecc sono tecnologie in rapida
evoluzione
• L’utilizzo di siti come Stack Overflow, oltre alle
documentazioni ufficiali, supportano tantissimo il
programmatore
• Stack Overflow è un sito web in cui si possono
porre domande su argomenti di
programmazione
Principali Tecnologie
Considerazioni
Node.js
MongoDB
Handlebars
Principali Tecnologie
Riassunto
Principali Tecnologie
Database | …
Principali Tecnologie
Database | BE | …
Principali Tecnologie
Database | BE | FE | …
Principali Tecnologie
Database | BE | FE | Strumenti
App MyTask
Database
Esempio: Lista Task
Miglioramenti
App MyTask
Database
Esempio: Lista Task
Miglioramenti
MyTask
Database | MongoDB
MyTask
Database | MongoDB | Collezioni
MyTask
Database | MongoDB | Documenti | 1/3
MyTask
Database | MongoDB | Documenti | 1/3
MyTask
Database | MongoDB | Documenti | 2/3
MyTask
Database | MongoDB | Documenti | 2/3
MyTask
Database | MongoDB | Documenti | 3/3
MyTask
Database | MongoDB | Documenti | 3/3
MyTask
Database | MongoDB | Documenti | 3/3
• bcrypt.js
• Libreria per eseguire l'hashing delle password
• Una funzione crittografica di hash è un algoritmo che
mappa un messaggio di lunghezza arbitraria in una stringa
binaria di dimensione fissa chiamata valore di hash
• Aumenta la sicurezza dell’app
MyTask
Database | MongoDB | Considerazioni finali
• I principali vantaggi riscontrati nell’utilizzare MongoDB
come database nella progettazione ed
implementazione dell’app MyTask sono stati i seguenti
1. Per i documenti, non è obbligatorio avere
una struttura rigida fissa
2. Inserire nuove informazioni è facilissimo
(proprietà dei documenti)
3. Ben documentato (documentazione
ufficiale, Stack Overflow, Googling, ecc )
App MyTask
Miglioramenti
Database
Esempio: Lista Task
{ Esempio: Lista Task | Schema }
task.js
{ Esempio: Lista Task | Documento }
{ Esempio: Lista Task | Route | 1/2 }
_navigazione.hbs
{ Esempio: Lista Task | Route | 1/2 }
_navigazione.hbs
{ Esempio: Lista Task | Route | 2/2 }
app.js
{ Esempio: Lista Task | Route | 2/2 }
app.js
lista_task.handlebars
Azionato da <a href="/lista_task">Lista Task </a>
{ Esempio: Lista Task | View | 1/2 }
lista_task.handlebars
{ Esempio: Lista Task | View | 2/2 }
App MyTask
Database
Esempio: Lista Task
Miglioramenti
Possibili miglioramenti?
Tantissimi…
Possibili miglioramenti?
MyTask
Possibili miglioramenti 1/2
• Possibili miglioramenti dell’App MyTask?
• Workflow dei task
• Sistema di notifica via email
• Inviare una email all’assegnatario del task se
la scadenza è prossima
• Interfaccia utente
• Grafica meno «spartana» e più gradevole
• Campi obbligatori/non obbligatori in base al
contenuto di altri campi
• Campi visibili/non visibili in base al contenuto di
altri campi
• «Semaforo» per evidenziare la prossimità della
scadenza di un task
MyTask
Possibili miglioramenti 2/2
• Possibili miglioramenti dell’App MyTask?
• Ricerca testuale task
• Pattern che matcha su tutti i campi di un task
• Numeri e stringhe
• Analisi dei task da parte di un manager
• Query più specifiche
• Ad esempio, riportare i task consegnati in
ritardo per assegnatario
• Registrazione utente anche tramite Facebook,
Twitter, ecc
• Tramite la libreria Passport.js
...
Link & Riferimenti
Link Progetto
Riferimenti Bibliografici
Link Progetto
Riferimenti Bibliografici
Link & Riferimenti
Link Progetto
• Link GitHub: https://github.com/pasqualematrone
• Link Slide: https://www.slideshare.net/PasqualeMatrone1
Link Progetto
Riferimenti Bibliografici
Link & Riferimenti
Riferimenti Bibliografici
• Node.js®
• https://nodejs.org/it/
• https://it.wikipedia.org/wiki/Node.js
• MongoDB
• https://www.mongodb.com/
• https://it.wikipedia.org/wiki/MongoDB
• https://db-engines.com/en/
• MongoDB Compass
• https://www.mongodb.com/products/compass
• Npm
• https://www.npmjs.com/
• https://it.wikipedia.org/wiki/Npm_(software)
• Mongoose.js
• https://mongoosejs.com/
• https://mongoosejs.com/docs/guide.html
• https://itnext.io/performance-tips-for-mongodb-mongoose-
190732a5d382
• https://en.wikipedia.org/wiki/Mongoose_(MongoDB)
• Express.js
• https://expressjs.com/it/
• https://it.wikipedia.org/wiki/Express.js
• Express-session
• https://www.npmjs.com/package/express-session
• Body-parser
• https://www.npmjs.com/package/body-parser
Riferimenti Bibliografici
• Connect-flash
• https://www.npmjs.com/package/connect-flash
• Passaport
• https://www.passportjs.org/
• Bcryptjs
• https://www.npmjs.com/package/bcryptjs
• https://it.wikipedia.org/wiki/Funzione_crittografica_di_hash
• Nodemon
• https://www.npmjs.com/package/nodemon
• Handlebars
• https://handlebarsjs.com/
Riferimenti Bibliografici
• Bootstrap
• https://getbootstrap.com/
• JavaScript
• https://developer.mozilla.org/en-
US/docs/Web/JavaScript?retiredLocale=it
• jQuery
• https://jquery.com/
• Stack Overflow
• https://stackoverflow.com/
• https://it.wikipedia.org/wiki/Stack_Overflow_(sito)
Riferimenti Bibliografici
Università degli Studi di Salerno
Dipartimento di Informatica
Pasquale Matrone
Basi Dati 2
# echo Grazie per l’attenzione|

More Related Content

Similar to MyTask

Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store appsDotNetCampus
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
Stefano Dindo
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architetturaMongoDB
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
Dominopoint - Italian Lotus User Group
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
Giuseppe Toto
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
DotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Chrome DevTools: le basi tecniche per comprendere meglio la SEO
Chrome DevTools: le basi tecniche per comprendere meglio la SEOChrome DevTools: le basi tecniche per comprendere meglio la SEO
Chrome DevTools: le basi tecniche per comprendere meglio la SEO
Giovanni Sacheli
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
Commit University
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
Massimiliano Dessì
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
guest67beeb9
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
Mariano Fiorentino
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 

Similar to MyTask (20)

Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architettura
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Chrome DevTools: le basi tecniche per comprendere meglio la SEO
Chrome DevTools: le basi tecniche per comprendere meglio la SEOChrome DevTools: le basi tecniche per comprendere meglio la SEO
Chrome DevTools: le basi tecniche per comprendere meglio la SEO
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 

MyTask

  • 1. Università degli Studi di Salerno Dipartimento di Informatica Basi Dati 2 MondoDB# MyTask Pasquale Matrone
  • 2. MyTask Applicazione in Node.js che usa il DBMS MongoDB per la gestione dei task (o «storie») di un progetto (o «sprint») DESCRIZIONE
  • 4. Overview funzionalità applicazione Ruoli App RUOLO DESCRIZIONE Sviluppatore • Visualizza, crea, assegna, si autoassegna task Project Manager • Visualizza, crea, assegna, si autoassegna task • Visualizza, crea progetti Manager • Visualizza, crea, assegna, si autoassegna task • Visualizza, crea progetti • Visualizza i «numeri» di un progetto • L’applicazione prevede tre tipi di utente (ruoli): Sviluppatore, Project Manager e Manager
  • 5. Overview funzionalità applicazione MyTask | 1/4 • Principali funzionalità App: • Registrazione nuovo utente, login, logout • Creazione nuovo task • Visualizzazione task (assegnati, creati, assegnati e creati) • Lavagna task per l’auto-assegnamento • Storico task (task già completati) • Ricerca testuale dei task (pattern di ricerca testuale) • Creazione nuovo progetto • Visualizzazione progetti (attivi e non attivi) • Visualizzazione dei «numeri» di un progetto • Numero di task per il progetto X in stato Y assegnati a Z
  • 6. Overview funzionalità applicazione MyTask | 2/4 • Registrazione nuovo utente: tre posizioni aziendali per i diversi ruoli nell’app (sviluppatore, pm, manager)
  • 7. Overview funzionalità applicazione MyTask | 3/4 • Lista Task Assegnati e Creati, Assegnati, Creati, Lavagna, Storico
  • 8. Overview funzionalità applicazione MyTask | 4/4 • Nuovo Task: tutti i campi, tranne Commenti, sono obbligatori
  • 11. • Node.js è un runtime system open source multipiattaforma orientato agli eventi per l'esecuzione di codice JavaScript • Un runtime system è un software che fornisce i servizi necessari all'esecuzione di un programma • Node.js consente di utilizzare JavaScript anche per scrivere codice da eseguire lato server • Ad esempio, per la produzione del contenuto delle pagine web dinamiche prima che la pagina venga inviata al browser dell'utente Principali Tecnologie Node.js | 1/3
  • 12. • Node.js permette quindi di implementare il cosiddetto paradigma «JavaScript everywhere» • npm (abbreviazione di Node Package Manager) è un gestore di pacchetti per il linguaggio di programmazione JavaScript • È il gestore di pacchetti predefinito di Node.js • Consiste in un client da linea di comando, chiamato anch’esso npm, e un database online di pacchetti pubblici e privati, chiamato npm registry • Di seguito, un elenco dei pacchetti usati per l’implementazione dell’app MyTask Principali Tecnologie Node.js | 2/3
  • 13. Principali Tecnologie Node.js | 3/3 PACCHETTO DESCRIZIONE Mongoose • Fornisce una soluzione semplice e basata su schema per modellare i dati dell’applicazione • Include il casting di tipo integrato, la validazione e la costruzione di query Express • Framework per applicazioni web per Node.js Express-session • Crea un middleware di sessione Connect-flash • Area speciale della sessione per memorizzare i messaggi Passport • Middleware di autenticazione Bcrypt • Funzione crittografica di hash Body-parser • Analizzare i body delle richieste in arrivo (proprietà req.body)
  • 14. Principali Tecnologie Node.js | 3/3 PACCHETTO DESCRIZIONE Mongoose • Fornisce una soluzione semplice e basata su schema per modellare i dati dell’applicazione • Include il casting di tipo integrato, la validazione e la costruzione di query Express • Framework per applicazioni web per Node.js Express-session • Crea un middleware di sessione Connect-flash • Area speciale della sessione per memorizzare i messaggi Passport • Middleware di autenticazione Bcrypt • Funzione crittografica di hash Body-parser • Analizzare i body delle richieste in arrivo (proprietà req.body) Maggiori dettagli in seguito…
  • 15. Principali Tecnologie Node.js | 3/3 PACCHETTO DESCRIZIONE Mongoose • Fornisce una soluzione semplice e basata su schema per modellare i dati dell’applicazione • Include il casting di tipo integrato, la validazione e la costruzione di query Express • Framework per applicazioni web per Node.js Express-session • Crea un middleware di sessione Connect-flash • Area speciale della sessione per memorizzare i messaggi Passport • Middleware di autenticazione Bcrypt • Funzione crittografica di hash Body-parser • Analizzare i body delle richieste in arrivo (proprietà req.body) • Per Routing si intende determinare come un’applicazione risponde ad una richiesta client per un endpoint particolare • Un endpoint è formato da 1. un URI (o percorso) 2. un metodo di richiesta HTTP specifico (GET, POST, ecc) Client Server
  • 17. • MongoDB è un DBMS non relazionale, orientato ai documenti • Il nome deriva da «humongous», enorme • Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database relazionali in favore di documenti in stile JSON con schema dinamico (BSON), rendendo l'integrazione di dati di alcuni tipi di applicazioni più facile e veloce Principali Tecnologie MongoDB| 1/3
  • 18. • Secondo db-engines.com, a gennaio 2022 MongoDB è al 5º posto della classifica dei database più popolari del mondo e al 1º posto dei database NoSQL • Alcuni degli utilizzatori più popolari di MongoDB sono • SAP • Forbes • The New York Times • Sourceforge • CERN • eBay • … Principali Tecnologie MongoDB| 2/3
  • 20. Principali Tecnologie MongoDB| Mongoose | 1/3 PACCHETTO DESCRIZIONE Mongoose • Fornisce una soluzione semplice e basata su schema per modellare i dati dell’applicazione • Include il casting di tipo integrato, la validazione e la costruzione di query Express • Framework per applicazioni web per Node.js Express-session • Crea un middleware di sessione Connect-flash • Area speciale della sessione per memorizzare i messaggi Passport • Middleware di autenticazione Bcrypt • Funzione crittografica di hash Body-parser • Analizzare i body delle richieste in arrivo (proprietà req.body)
  • 21. Principali Tecnologie MongoDB| Mongoose | 2/3 Mongoose: libreria JavaScript orientata agli oggetti, che crea una connessione tra MongoDB ed Express
  • 23. Mongoose «semplifica» lo sviluppo con MongoDB Ecco perché esiste ed ho utilizzato Mongoose Principali Tecnologie MongoDB| Mongoose | 3/3
  • 24. Mongoose «semplifica» lo sviluppo con MongoDB Ecco perché esiste ed ho utilizzato Mongoose Principali Tecnologie MongoDB| Mongoose | 3/3 Approfondiamo le caratteristiche principali di Mongoose
  • 27. Principali Tecnologie MongoDB| Mongoose | Schema • Ogni schema mappa una collezione MongoDB e definisce la forma dei documenti all'interno di quella collezione • Definisce il tipo di ogni proprietà • String • Number • Date • Boolean • Array • …
  • 29. Principali Tecnologie MongoDB| Mongoose | Modello • I modelli sono responsabili della creazione e della lettura dei documenti dal sottostante database MongoDB • I modelli sono definiti a partire da uno schema • Il primo argomento della funzione mongoose.model() è il nome singolare della collezione • Un'istanza di un modello è chiamata documento
  • 31. Principali Tecnologie MongoDB| Mongoose | Query • Alcune funzioni statiche di un modello Mongoose per le operazioni CRUD (create, read, update, delete) sono le seguenti: • Model.deleteMany() • Model.deleteOne() • Model.find() • Model.findById() • Model.findByIdAndDelete() • Model.findByIdAndUpdate() • E tante altre… • Ciascuna di queste funzioni restituisce un oggetto Query di tipo Mongoose
  • 32. Principali Tecnologie MongoDB| Mongoose | Query • Alcune funzioni statiche di un modello Mongoose per le operazioni CRUD (create, read, update, delete) sono le seguenti: • Model.deleteMany() • Model.deleteOne() • Model.find() • Model.findById() • Model.findByIdAndDelete() • Model.findByIdAndUpdate() • E tanta altre… • Ciascuna di queste funzioni restituisce un oggetto Query di tipo Mongoose SEMPLICE ESEMPIO /* Trovare i libri intitolati «I promessi sposi» */ Libro.find({titolo: "I promessi sposi"}, function (err, docs){ if(err){ return console.log(err); } console.log('Found documents filtered by { autore: "I promessi sposi" } =>', docs); });
  • 34. Principali Tecnologie MongoDB| Mongoose | Indici • Oltre all’indice di default sul campo «_id», MongoDB permette di creare indici su altre proprietà dello schema • In questo modo, i documenti, possono essere indicizzati in base alle nostre proprietà per un accesso più veloce • Possiamo anche creare indici composti da più di una proprietà (compound indexes) • ModelSchema.index() //Indici custom per le mie query taskSchema.index({utente: 1}); taskSchema.index({assegnatario: 1});
  • 36. • Handlebars è un semplice linguaggio di template • Un «espressione handlebars» viene sostituita con i valori di un oggetto di input • A completare il pacchetto delle tecnologie front-end utilizzate nell’applicazione MyTask, troviamo • HTML • CSS • Bootstrap • Componenti interfaccia sito web • jQuery • Libreria JavaScript «feature-rich» Principali Tecnologie Handlebars
  • 38. • Node.js, Handlebars, ecc sono tecnologie in rapida evoluzione • L’utilizzo di siti come Stack Overflow, oltre alle documentazioni ufficiali, supportano tantissimo il programmatore • Stack Overflow è un sito web in cui si possono porre domande su argomenti di programmazione Principali Tecnologie Considerazioni
  • 43. Principali Tecnologie Database | BE | FE | Strumenti
  • 48. MyTask Database | MongoDB | Documenti | 1/3
  • 49. MyTask Database | MongoDB | Documenti | 1/3
  • 50. MyTask Database | MongoDB | Documenti | 2/3
  • 51. MyTask Database | MongoDB | Documenti | 2/3
  • 52. MyTask Database | MongoDB | Documenti | 3/3
  • 53. MyTask Database | MongoDB | Documenti | 3/3
  • 54. MyTask Database | MongoDB | Documenti | 3/3 • bcrypt.js • Libreria per eseguire l'hashing delle password • Una funzione crittografica di hash è un algoritmo che mappa un messaggio di lunghezza arbitraria in una stringa binaria di dimensione fissa chiamata valore di hash • Aumenta la sicurezza dell’app
  • 55. MyTask Database | MongoDB | Considerazioni finali • I principali vantaggi riscontrati nell’utilizzare MongoDB come database nella progettazione ed implementazione dell’app MyTask sono stati i seguenti 1. Per i documenti, non è obbligatorio avere una struttura rigida fissa 2. Inserire nuove informazioni è facilissimo (proprietà dei documenti) 3. Ben documentato (documentazione ufficiale, Stack Overflow, Googling, ecc )
  • 57. { Esempio: Lista Task | Schema } task.js
  • 58. { Esempio: Lista Task | Documento }
  • 59. { Esempio: Lista Task | Route | 1/2 } _navigazione.hbs
  • 60. { Esempio: Lista Task | Route | 1/2 } _navigazione.hbs
  • 61. { Esempio: Lista Task | Route | 2/2 } app.js
  • 62. { Esempio: Lista Task | Route | 2/2 } app.js lista_task.handlebars Azionato da <a href="/lista_task">Lista Task </a>
  • 63. { Esempio: Lista Task | View | 1/2 } lista_task.handlebars
  • 64. { Esempio: Lista Task | View | 2/2 }
  • 68. MyTask Possibili miglioramenti 1/2 • Possibili miglioramenti dell’App MyTask? • Workflow dei task • Sistema di notifica via email • Inviare una email all’assegnatario del task se la scadenza è prossima • Interfaccia utente • Grafica meno «spartana» e più gradevole • Campi obbligatori/non obbligatori in base al contenuto di altri campi • Campi visibili/non visibili in base al contenuto di altri campi • «Semaforo» per evidenziare la prossimità della scadenza di un task
  • 69. MyTask Possibili miglioramenti 2/2 • Possibili miglioramenti dell’App MyTask? • Ricerca testuale task • Pattern che matcha su tutti i campi di un task • Numeri e stringhe • Analisi dei task da parte di un manager • Query più specifiche • Ad esempio, riportare i task consegnati in ritardo per assegnatario • Registrazione utente anche tramite Facebook, Twitter, ecc • Tramite la libreria Passport.js ...
  • 70. Link & Riferimenti Link Progetto Riferimenti Bibliografici
  • 72. Link Progetto • Link GitHub: https://github.com/pasqualematrone • Link Slide: https://www.slideshare.net/PasqualeMatrone1
  • 74. Riferimenti Bibliografici • Node.js® • https://nodejs.org/it/ • https://it.wikipedia.org/wiki/Node.js • MongoDB • https://www.mongodb.com/ • https://it.wikipedia.org/wiki/MongoDB • https://db-engines.com/en/ • MongoDB Compass • https://www.mongodb.com/products/compass • Npm • https://www.npmjs.com/ • https://it.wikipedia.org/wiki/Npm_(software)
  • 75. • Mongoose.js • https://mongoosejs.com/ • https://mongoosejs.com/docs/guide.html • https://itnext.io/performance-tips-for-mongodb-mongoose- 190732a5d382 • https://en.wikipedia.org/wiki/Mongoose_(MongoDB) • Express.js • https://expressjs.com/it/ • https://it.wikipedia.org/wiki/Express.js • Express-session • https://www.npmjs.com/package/express-session • Body-parser • https://www.npmjs.com/package/body-parser Riferimenti Bibliografici
  • 76. • Connect-flash • https://www.npmjs.com/package/connect-flash • Passaport • https://www.passportjs.org/ • Bcryptjs • https://www.npmjs.com/package/bcryptjs • https://it.wikipedia.org/wiki/Funzione_crittografica_di_hash • Nodemon • https://www.npmjs.com/package/nodemon • Handlebars • https://handlebarsjs.com/ Riferimenti Bibliografici
  • 77. • Bootstrap • https://getbootstrap.com/ • JavaScript • https://developer.mozilla.org/en- US/docs/Web/JavaScript?retiredLocale=it • jQuery • https://jquery.com/ • Stack Overflow • https://stackoverflow.com/ • https://it.wikipedia.org/wiki/Stack_Overflow_(sito) Riferimenti Bibliografici
  • 78. Università degli Studi di Salerno Dipartimento di Informatica Pasquale Matrone Basi Dati 2 # echo Grazie per l’attenzione|