I dati sono distribuiti su un file di testo, che non siamo riusciti a ricondurre ad alcun pattern. Per ovviare al problema abbiamo scritto un piccolo scraper che ha letto i dati e li ha strutturati su CSV.

In un mondo alternativo i dati sono già strutturati. Purtroppo la realtà è diversa.

Dato che l'app doveva essere online in cinque giorni non c'era tempo di costruire un backend ad-hoc. Per questo ci siamo appoggiati a Google Drive, che fornisce un servizio per esporre API da Google Sheets, il servizio simile a Excel presente nella suite di Drive.

Una volta popolato il foglio di Google Sheets potevamo fare query direttamente da lì, senza avere un "vero" backend.

Il design

Abbiamo optato per un design basato interamente sulle guidelines di Google Material Design, questo anche per semplificare anche la parte di sviluppo. Utilizzando elementi stock lo sviluppo procede più velocemente perché utilizza componenti già implementate e testate.

Il design si è svolto principalmente su lavagna, e con piccoli spunti su Sketch, per chiarire quali elementi di UI utilizzare.

Qui abbiamo definito l'elevation degli elementi.

Terminata la parte di UI siamo passati a realizzare un'icona bella. Considerato che non siamo visual designer è stata una delle parti su cui abbiamo fatto più fatica!

Dopo numerosi tentativi — alcuni dei quali veramente brutti — siamo arrivati a un'icona che è perfettamente a suo agio in questo mondo flat, ma non troppo, che è Material Design.

Da un punto di vista tecnico

Abbiamo deciso di utilizzare MVP come pattern architetturale per il progetto. Ci siamo appoggiati ad una libreria esterna, Mosby (che si chiama così in onore di Ted Mosby, da How I Met Your Mother!), per generare tutto il boilerplate e per dare la giusta impostazione al codice.

Lo so, è Barney, ma ci sono veramente pochi telefoni o app in HIMYM.

Model-View-Presenter (MVP) si basa sulla separazione netta della business logic (presenter) dalle activity/fragment (view). Le view delegano le richieste dei dati (model) al presenter, il quale si occupa si recuperarli e fornirli secondo le opportune considerazioni.

Grazie a questo pattern si evita di scrivere classi di activity/fragment da 1000+ righe di codice, tutti i metodi risultano molto succinti e la leggibilità del codice è ottima.

Il progetto è disponibile open source su Github, per i nerd più coraggiosi tra voi.