DelphiMVCFramework Official Guide: la recensione

Negli ultimi mesi sono piacevolmente usciti molti libri sulla programmazione Delphi. Le tematiche spaziano dall’ottimizzazione di algoritmi all’incremento delle performance, dai design pattern alle pratiche per velocizzare al massimo la scrittura di codice in Delphi. Tra queste pubblicazioni ne troviamo una decisamente interessante e molto attesa: la DelphiMVCFramework Official Guide.
L’autore del libro oltreché principale mantainer del progetto è Daniele Teti (CEO di bitTime Professionals). Si tratta della guida ufficiale all’uso di DelphiMVCFramework, una delle librerie più conosciute e utilizzate per lo sviluppo di server REST in Delphi.
Se i termini utilizzati sino a ora ti sembrano completamente nuovi oppure oscuri, ecco una premessa che dovrebbe colmare questa lacuna.
Delphi e il Web
Nel corso della sua lunga vita, Delphi ha conosciuto (spesso prima di altri tool di sviluppo) le tecnologie che sarebbero diventate poi il fondamento delle future applicazioni.
Già dalla versione 3, Delphi includeva librerie per realizzare architetture multi-tier (MIDAS) e per la produzione di pagine HTML (WebBroker). Col tempo si sono affiancate soluzioni per lo sviluppo RAD di applicazioni Web (come IntraWeb). Esse erano del tutto simili alle idee proposte dalla concorrenza (es. ASP.NET Web Forms) per ottenere il medesimo risultato finale, ovvero esporre una GUI fruibile da qualsiasi browser in grado di collegarsi a una base dati.
Lo scenario tuttavia oggi è cambiato. L’approccio client/server, o n-tier, ovvero l’accesso a dati in rete locale non è più sufficiente. Lo stesso vale per le suddette applicazioni Web, troppo “pesanti” poiché incentrate sulla generazione lato server dell’intera GUI e poco efficaci nel presentare all’utente una esperienza simile a quella che può fruire lato desktop.
Brevemente, la necessità odierna è quella di disaccoppiare i database da qualsiasi tipo di interfaccia utente, sia essa una applicazione Web o un programma desktop, inserendo tra questi due elementi un server con lo scopo di fornire “mobilità” ai dati.
Let’s get some REST!
I linguaggi e le piattaforme con cui è possibile sviluppare un programma client sono molteplici: per questo è necessario che il server utilizzi un protocollo standard, ovvero HTTP, e adotti formati standard per il trasferimento dei dati, ad esempio XML.
Prima erano i Web Service…
Se pensi io stia parlando dei Web Service, stai sbagliando. Essi sono l’incarnazione del primo (e ancora molto diffuso) tentativo di realizzare API standard. L’uso del protocollo HTTP è però marginale poiché limitato al trasporto dei pacchetti. I pacchetti sono basati su uno standard quale è SOAP che, sebbene abbia la parola “Simple” nel nome, può diventare estremamente ostico se si ha a che fare con le sue estensioni. Usare un Web Service richiede inoltre la conoscenza delle operazioni che implementa: è necessario recuperarne la struttura documentata con un altro standard, il caro WSDL. Tutto troppo complicato, e soprattutto troppo rigido per le esigenze di oggi.
HTTP come protocollo “principe”
Proviamo ora a fare una ricetta. Prendi il protocollo HTTP. Immagina ora che, al posto di pagine Web tradizionali, si trasferiscano dati di clienti, fornitori, fatture e così via. Sostituisci poi il linguaggio HTML con documenti XML semplici (non SOAP!) o con strutture ancora più rastremate come JSON. Pensa poi all’indirizzo URL come alla locazione universale e parlante di una “risorsa” (un cliente o una fattura) invece che di una pagina Web. Ora i comandi HTTP: oltre ai più noti GET e POST, includi almeno anche PUT e DELETE trasformando questi “verbi” nella classica tavola CRUD. Ora pensa ai codici di stato che HTTP fornisce in risposta: ad esempio, il più conosciuto, il classico “errore 404”, non indicherà l’impossibilità di trovare una pagina, bensì una delle tue risorse. Amalgama il tutto ed ecco che avrai qualcosa di molto simile a un (goloso e fumante) server REST!
Tutto ciò però ha una implicazione: non possiamo fare finta che HTTP non esista e trattarlo come un mero veicolo di dati, ma dobbiamo padroneggiarlo come si deve. Nel fare questo, dobbiamo anche rispettare scrupolosamente le convenzioni che gli sviluppatori di eventuali client per la nostra API si attendono. Idealmente, dovremmo puntare al livello più alto del Richardson Maturity Model, il cosiddetto “Glory of REST”.
Delphi e il suo ecosistema ci offre diverse alternative. Potremmo decidere di lavorare a basso livello usando direttamente WebBroker. Oppure potremmo beneficiare di un minimo di astrazione in più con i componenti Indy. Ridurremmo ulteriormente lo sforzo se adottassimo una delle tante librerie ad hoc disponibili per Delphi; ad esempio, RAD Server è una soluzione “chiavi in mano” già disponibile dall’edizione Enterprise. Perché non pescare invece tra le tante librerie open source? Ne possiamo scegliere una popolare, semplice, flessibile e – grazie al libro oggetto di questa recensione – anche ottimamente documentata: DelphiMVCFramework!
Prima di passare a parlare della DelphiMVCFramework Official Guide, partiamo dall’ABC… o meglio, da MVC. 😄
Il pattern MVC
MVC (Model View Controller) è un pattern architetturale in uso da parecchi anni. Esso è stato creato con lo scopo di separare la logica di presentazione da quella di business.
Il pattern è tornato in voga soprattutto nell’ambito dello sviluppo Web poiché costituisce la colonna portante di librerie e framework particolarmente noti e apprezzati, sia lato client (come AngularJS) sia lato server (ad esempio Ruby On Rails o ASP.NET MVC).
Il suo successo deriva dalla semplicità con cui permette di creare soluzioni software altamente disaccoppiate. Questo benefit deriva sia dall’adesione stretta al pattern, ma anche dagli strumenti (classi base, attributi, decoratori, convertitori, ecc.) apportati dai framework che vi si appoggiano. Questi elementi combinati con l’efficacia del pattern consentono di implementare agevolmente le feature dell’applicazione. Ciò avviene non solo aggiungendo la propria logica di business, ma creando estensioni agli stessi framework. L’intera architettura rimane sempre e comunque perfettamente mantenibile, quasi un tributo al Clean Code! Ciò vale per tutti i framework citati, e ovviamente anche per DelphiMVCFramework.
DelphiMVCFramework alla riscossa!
Se non conoscete minimamente DelphiMVCFramework, dovete rimediare subito!
Vi sono diverse risorse che permettono di acquisire una panoramica veloce su ciò che potete realizzare con il framework. Ad esempio, potete guardarvi questo corso introduttivo di un paio d’ore (in lingua italiana) tenuto dallo stesso Daniele. Se siete di fretta, ci sono i filmati della recente DMVC Week su YouTube. Se siete in macchina o state correndo all’aria aperta, potete ascoltare l’intervista a Daniele Teti in questo episodio di Delphi Podcast.
Il codice sorgente del framework può essere scaricato direttamente dal repository ufficiale di GitHub, nel quale trovate anche un elenco delle funzionalità presenti nell’ultima versione (nel momento in cui scrivo), la 3.2.1 codename “carbon“.
Solo per dare una idea delle potenzialità, guardate quanti tipi di oggetti si possono restituire ai client usando un solo metodo, Render()
:

Non mi dilungherò a elencare nel dettaglio l’elenco impressionante di feature che il framework vi mette a disposizione. Farlo richiederebbe un libro intero per descriverle tutte minuziosamente.
Aspetta un momento… un libro c’è già. E’ la DelphiMVCFramework Official Guide! 🙂
DelphiMVCFramework Official Guide: una guida imperdibile!
La DelphiMVCFramework Official Guide è il testo indispensabile per creare il tuo server ed esporre la tua API sfruttando la potenza di REST o di JSON-RPC e usando uno dei framework più popolari e completi per Delphi.
La prima pubblicazione completa della guida risale a metà settembre, e può essere acquistata sul sito LeanPub. Oltre al classico PDF, è disponibile anche nei formati EPUB (per telefoni e table) e MOBI (per Kindle).
Si tratta di un testo imperdibile per qualsiasi sviluppatore Delphi, e ora ne illustro tutti i motivi.
Innanzitutto, non si tratta di una banale guida introduttiva al framework DMVC: essa esplora nel dettaglio tutte le sue caratteristiche in modo approfondito. E’ pertanto una preziosissima risorsa per imparare a usare come si deve il framework e ottenere il massimo potenziale dallo stesso.
Il pattern MVC spiegato bene
Nell’illustrare tutti gli strumenti che il framework mette a disposizione, Daniele spiegherà MVC e tutti gli attori che fanno parte di questo paradigma. Imparerai quindi a conoscere il pattern MVC in modo approfondito. Oltre a DelphiMVCFramework, queste nozioni ti consentiranno di usare con sicurezza tutti gli altri framework disponibili per altre piattaforme e linguaggi che si basano sullo stesso pattern (ad esempio, ASP.NET MVC, oppure NodeJS Express, Angular, RoR e tanti altri ancora).
REST a regola d’arte
La guida ti darà inoltre un ulteriore valore aggiunto: la spiegazione dettagliata di come creare una API REST perfetta. Apprenderai i segreti per implementare i verbi HTTP nel modo corretto, definire gli URL di accesso alle risorse. E ancora, quale formattazione usare nella ricezione e restituzione dei dati, i codici numerici di risposta e così via. Insomma, la tua sarà una API che implementa REST (o JSON-RPC, se lo preferite) rispettando tutte le convenzioni. Con questo bagaglio di conoscenze, potrai creare agevolmente anche qualsiasi applicazione client, dialogando magari con server sviluppati da terzi, ma aderenti alle stesse regole. Oppure ancora potrai riusare queste nozioni nella creazione di server REST con altre librerie e altri linguaggi su ecosistemi differenti (es. ASP.NET Core Web API).
DelphiMVCFramework non ha più segreti
Riguardo DMVC nello specifico, il libro fornisce una panoramica chiara, esaustiva e completa del framework. Si parte dalla sua installazione e configurazione, creando quasi da subito il primo progetto. Dopo aver mosso i primi passi, si aggiungono nuovi scenari e requisiti aumentando la complessità. Questi espedienti permettono di scoprire gradualmente gli strumenti che il framework mette a disposizione per risolvere ciascun problema. I requisiti presi in esame, pur trattandosi di esempio, sono comunque sempre concreti e pratici, mai astratti o surreali.
Tanti tool aggiuntivi, piccoli ma potenti
Per testare il tuo server REST e svolgere tante altre operazioni di contorno, oltre al classico browser, farai uso di interessanti tool specifici (ad esempio, cURL). Daniele ti spiegherà anche come usare Python per invocare la tua API. La conoscenza di questi programmi può tornare utile nel caso si voglia adoperarli anche in altri contesti differenti.
Esempi chiari
Una scelta che ho particolarmente apprezzato è quella di riportare esempi di codice mirati. Gran parte dei libri in circolazione rimanda solamente al codice di esempio a corredo, da scaricare e aprire mentre si legge. Ritengo invece encomiabile che ogni trattazione di uno specifico argomento riporti sul libro la parte di codice interessata, privata di tutto ciò che è estraneo. Questo consente di seguire tranquillamente il testo senza avere lo schermo con il codice aperto davanti. Potrai quindi esplorare le feature di DMVCFramework leggendo il libro a letto prima di dormire. Quando ti alzerai il giorno dopo, e sarai davanti al PC, potrai esercitarti su quanto imparato. Il codice sorgente completo è comunque disponibile per il download sul sito LeanPub.
La cura dei dettagli c’è (e si vede)
Un altro pregio credo sia quello di aver istituito un preciso vocabolario tecnico. Il framework è molto vasto, quindi dare un nome preciso a ogni cosa che contiene è senz’altro di aiuto. Non vi è confusione o ambiguità su ciò che fa un Controller, una System Action o una Strongly Typed Action, o su cosa sono gli URL Mapped Parameters. L’adozione di termini specifici per determinati strumenti aiuta la formazione, ma anche la descrizione circostanziata di eventuali problemi quando si ha bisogno di supporto. A tal proposito, se sei in difficoltà o ti piace aiutare gli altri sviluppatori della community, iscriviti al gruppo Facebook.
Infine, laddove gli elenchi puntati sarebbero stati sufficienti, al loro posto spesso vengono usate delle tabelle riepilogative. Questo permette di “espandere” la definizione di ciascun elemento con note ed esempi chiarificatori.

Nel testo vi sono inoltre svariati diagrammi e grafici. Queste decisioni stilistiche vanno a tutto vantaggio della comprensione dei concetti. Si tratta forse di piccolezze, ma la cura dei dettagli si vede e porta i suoi benefici.

Conclusioni
Qualora non sia ancora del tutto chiaro, DelphiMVCFramework Official Guide è un testo che non deve assolutamente mancare nella tua libreria tecnica!
Che tu voglia iniziare a usare DMVC o che tu abbia intenzione di usare un’altra libreria, il libro può esserti comunque di estremo aiuto per capire MVC, REST, JSON-RPC e altri tasselli del mondo in cui stai per addentrarti.
Se invece usi già DMVC nei tuoi progetti, il libro ti servirà per approfondirne la conoscenza a 360° ed esplorare nuovi modi per estendere e “carrozzare” la tua API.
Ora non hai più scuse per rottamare la tua vecchia soluzione client/server e portarla (finalmente) nel nuovo millennio. Ciò è ancora più giustificato dalla pletora di strumenti che DMVC ti rende disponibili per esporre risorse con un’attenzione particolare al riuso del codice eventualmente già esistente, come da tradizione Delphi.
Il framework c’è, e ha raggiunto una invidiabile maturità. Ora che c’è pure il manuale d’uso. Cosa aspetti ad accaparrartelo e iniziare a programmare? 😉