Nella scorsa lezione abbiamo parlato del pattern Provider, un pattern che si rende particolarmente utile nella fase di state management di una app scritta in Flutter. Abbiamo applicato questo pattern alla nostra ormai famosa form di login, rimuovendo completamente gli stateful widget e rifattorizzando il codice in più classi.
Oggi introdurremo un nuovo pattern fulcro del corso che stiamo affrontando insieme, e che funziona molto bene in accoppiata con il pattern provider, stiamo parlando di BLoC, acronimo di Business Logic Component.
Prima di iniziare a parlarvi più nel dettaglio di BLoC e della sua evoluzione, sappiate che la classe LoginService che abbiamo realizzato nella scorsa lezione potrebbe essere considerata come una forma primordiale di BLoC.
Come ormai avrete capito, Flutter funziona basandosi sul paradigma event driven, conseguenza di uno sviluppo fondato sul concetto di reactive programming. Tutto ruota attorno agli stream, ed il pattern BLoC non è da meno. BLoC nasce essenzialmente per garantire ancora una volta che si rispetti uno dei fondamenti dell’Ingegneria del Software, ossia la separazione degli interessi.
Una regola generale da tenere a mente, non solo durante lo sviluppo di applicazioni in Flutter, è quella di sforzarsi di scrivere codice pulito, lineare, leggibile e funzionalmente organizzato. È importante smettere di scrivere codice alla “basta che funzioni”, questo atteggiamento paga solo nel breve termine. Una diretta conseguenza della scrittura di codice funzionalmente organizzato è appunto la separazione degli interessi: è importante separare il presentation layer ossia quelle che saranno le componenti della nostra interfaccia dalla logica di business del prodotto, ossia la parte di codice che si occuperà di eseguire i calcoli.
BLoC ci permette di soddisfare in toto il requisito della separazione degli interessi: le componenti di interfaccia, i Widget che andremo a visualizzare a schermo funzioneranno indipendentemente dal codice che andremo a scolpire all’interno della logica di business. Questa separazione ha un forte impatto sulla manutenibilità e sull’evoluzione dei due layer, quello di business e quello di presentation.
Con il passare del tempo si è consolidata una libreria realizzata da Felix Angelov che prende il nome di flutter_bloc, attraverso la quale saremo in grado di modellare e applicare il pattern BLoC intercettando gli stati emessi dalla logica di business, scatenati da una serie di eventi che si verificano durante il ciclo di vita e durante l’interazione con la nostra app.
Volendo fare un parallelo, anche la nostra vita si basa sul paradigma event driven: siamo letteralmente programmati per rispondere ad eventi esterni attraverso dei comportamenti, ossia degli stati.
Ma smettiamola di filosofeggiare, e proviamo ad applicare il paradigma event driven sulla nostra ormai famosa pagina di Login. Provando ad analizzare meglio la nostra situazione, possiamo individuare due eventi che si verificheranno interagendo con la nostra pagina: un evento di cambiamento del campo email, ed un evento di cambiamento del campo password, gli stati che invece si andranno a creare saranno principalmente due, uno stato iniziale in cui entrambi i campi sono vuoti, ed uno stato in cui almeno uno dei due campi conterrà dei dati. Per semplicità, questi due stati potrebbero sovrapporsi, dando vita ad un unico stato che farà essenzialmente da contenitore dei dati inseriti. Decoreremo questo contenitore per ottenere informazioni aggiuntive sulla validità dei dati inseriti all’interno dei rispettivi campi.
Mettiamoci all’opera e convertiamo la nostra app realizzata con approccio provider + service, in un’app con approccio provider + bloc.
Sebbene questo BLoC possa essere ulteriormente migliorato e raffinato, è evidente come sia semplicissimo realizzare la validazione dei campi di una form di login mantenendo disaccoppiata la logica di business.
Siete tutti carichi e pronti per questa entusiasmante avventura all'insegna dell'apprendimento del framework più veloce di sempre firmato Google per realizzare app cross platform per Android ed iOS? Io non vedo l'ora, e voi?
Grazie a questo corso imparerai a conoscere Dart, un linguaggio di programmazione sviluppato da Google per costruire la logica e le interfacce delle app. Apprenderai concetti di gestione della user experience, del material design e imparerai a conoscere i cupertino widgets. Conoscerai e applicherai il pattern per antonomasia nella realizzazione delle app in Flutter: BLoC, oltre che ad imparare come far comunicare la tua app con sistemi esterni attraverso servizi RESTful, e come memorizzare questi dati.
Информация по комментариям в разработке