Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

36
Creare componenti AngularJS riutilizzabili tra applicazioni #VendiniOpenDay Giacomo Burattini Software Engineer giacomoburattini @satomy79 Andrea Stronati Software Engineer astronati @stronatiandrea

Transcript of Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Page 1: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Creare componenti AngularJS riutilizzabili tra applicazioni

#VendiniOpenDay

Giacomo BurattiniSoftware Engineergiacomoburattini @satomy79

Andrea StronatiSoftware Engineer

astronati @stronatiandrea

Andrea Stronati
[email protected] ho dei dubbi su questa slide
Giacomo Burattini
anche io volendo la possiamo togliere, si spiega in quella prima
Andrea Stronati
domani parliamone! gas
Page 2: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Chi siamo?Siamo Software Engineers a Vendini

Di che cosa ci occupiamo?

★ Backend ma soprattutto Frontend: JS, HTML e CSS

★ AngularJS, ExtJS, Backbone, jQuery, Grunt || Gulp

★ L’idea di base? "Make it simple!"

Page 3: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Member HomeMember home is a web app that helps you handle, promote and cultivate your business.

Page 4: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Member Home

Applicazione web sviluppata con AngularJS

★ Testabile (Dependency Injection)

★ Community (53k risultati su GitHub)

★ Google Approved

Angular 1.x

Page 5: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Patron ConnectPatron Connect is a mobile app that helps you engage, manage and cultivate your patrons.

Page 6: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Patron Connect

App mobile ibrida per tablet e telefonini sviluppata con Ionic

★ Unica codebase per Android e iOS

★ Velocità di sviluppo

★ AngularJS = condivisione di codice con altri progetti

Perchè Ionic?

Page 7: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Perchè condividere codice?

★ Evitare duplicazione codice

★ Migliorare manutenibilità

★ Diminuire gli errori

★ Garantire consistenza tra le applicazioni

Page 8: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Cosa condividere tra applicazioni AngularJS?

★ Services

★ Filters

★ Directives

★ Models

Page 9: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Parliamo di …. moduli!Cosa è un Modulo?E’ un contenitore di parti differenti della applicazione: controllers, servizi, filtri, direttive, ecc...

Perchè li utilizziamo?★ I moduli sono riusabili

★ Facilitano la scrittura dei tests

Page 10: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Angular usa il pattern MVW

M Model V View W Whatever

Page 11: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Angular usa il pattern MVW

★ Services

★ Filters

★ Directives

★ Models

M Model V View W Whatever

Page 12: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Angular usa il pattern MVW

★ Services

★ Filters

★ Directives

★ Models

M Model V View W Whatever

Page 13: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Angular usa il pattern MVW

★ Services

★ Filters

★ Directives

★ Models

M Model V View W Whatever

Page 14: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tre differenti repositories:

★ vnd-toolkit (services, filters)

★ vnd-widgets (directives)

★ vnd-models

Page 15: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tre differenti repositories:

★ vnd-toolkit (services, filters)

★ vnd-widgets (directives)

★ vnd-models

Page 16: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Services: vnd-toolkit

★ Services

★ Filters

★ Directives

★ Models

Page 17: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Un service condiviso: AnalyticsService

★ Permette di inviare informazioni a GA

★ Permette di gestire una coda di eventi

★ Le informazioni vengono inviate attraverso una batch request

Page 18: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Filters: vnd-toolkit

★ Services

★ Filters

★ Directives

★ Models

Page 19: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Un filtro condiviso: performanceDate★ Le performance date possono essere espresse come:

date range (es. Feb 25, 2016 - Jul 31, 2016)data singola (es. Feb 25, 2016)un messaggio personalizzato

★ Devono tenere in considerazione il fuso orario del venue.

★ La stessa performance deve avere la medesima rappresentazione tra tutte le applicazioni

ng-bind="performance | performanceDate"

Page 20: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tre differenti repositories:

★ vnd-toolkit (services, filters)

★ vnd-widgets (directives)

★ vnd-models

Page 21: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Directives: vnd-widgets

★ Services

★ Filters

★ Directives

★ Models

Page 22: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Una directive condivisa: Badge

★ E’ una “label” per mostrare foto profilo e/o iniziali

★ Si puo customizzare: colore, dimensione, achievement...

★ E’ un componente a livelli

Page 23: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tre differenti repositories:

★ vnd-toolkit (services, filters)

★ vnd-widgets (directives)

★ vnd-models

Page 24: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Models: vendini-models

★ Services

★ Filters

★ Directives

★ Models

Page 25: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Vendini API Models

Una collezione di modelli per interagire con le API RESTful Vendini

★ Basato su angular-resource

★ Crea un livello di astrazione tra client ed API

★ Services che fanno da data mapper

Page 26: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tricks e suggerimenti

★ Commentate il codice, usate i docblock

★ Una buona Style Guide per Angular: https://github.com/johnpapa/angular-styleguide/

★ Utilizzare i prefissi per i nostri componenti (vnd-, dm-, od-...)

★ File system naming: hyphen-case

★ Fare uso di moduli per incapsulare componenti (Angular)

Page 27: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tips and tricks: organizzazione del progetto★ /src

○ /badge■ badge.directive.js■ badge.directive.spec.js■ badge.template.html■ badge.module.js

○ vnd-widgets.module.js

★ /dist○ /badge

■ badge.js■ badge.min.js■ badge.css

○ vnd-widgets.js○ vnd-widgets.min.js

Page 28: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Alcuni task utili per il codice condiviso

★ Linting

★ Testing

★ Build

★ Generazione documentazione con ngdocs

★ Deployment

Page 29: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Linting

Analisi statica del codice

★ Riduce errori di sintassi

★ Code style consistente tra i repositories

★ Diminuzione tempi code review

★ ESlint

Page 30: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Test e coverage

★ Unit test con Karma e Jasmine

★ Coverage con Istanbul

Page 31: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Test e coverage

★ Esecuzione degli unit tests

★ Permette di stabilire quale codice viene effettivamente testato

Page 32: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Build★ I file sorgenti vengono concatenati e minificati.

★ Generazione della Source Map (development)

*.js

*.min.js

Page 33: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Documentazione con ngdocs

Generazione della documentazione secondo lo standard ng-docs.

/** * @ngdoc object * @module vnd.api-resource * @name apiResourceProxy * @description * A provider for a service… * ... */

Page 34: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Deployment

★ Generazione del tag per git

★ Aggiornamento versione nel bower.json e/o package.json

Page 35: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Tricks e suggerimenti ��Prima di ogni push:

★ Esecuzione di test e linting del codice prima di ogni push

★ Validazione sintattica del messaggio di commit

Dopo un pull o un merge:

★ Aggiornare dipendenze bower e/o npm

https://github.com/typicode/husky

Page 36: Open Day June 17th Creare componenti AngularJS riutilizzabili tra applicazioni

Grazie mille per l’attenzione!

PEACE

Domande?

LOVE CODE

</>