Ciao, e benvenuto nella prima puntata della cinquantasettesima stagione di questo podcast. Nelle ultime stagioni siamo stati dentro i database: le fondamenta, poi il mondo relazionale, i documenti, le colonne larghe distribuite. Abbiamo studiato la macchina che conserva i dati. Oggi facciamo un passo indietro e guardiamo il ponte: lo strato che collega il tuo codice a tutti quei database. Oggi apriamo un tema che vive nel lavoro di ogni giorno di chi programma: la mappatura tra oggetti e tabelle, quella che in inglese si chiama Object-Relational Mapping, e che tutti chiamano con la sigla ORM.
Partiamo dal problema, perché è più profondo di quanto sembri. Il tuo programma ragiona per oggetti: un utente, un ordine, un prodotto, ognuno con le sue proprietà e con collegamenti agli altri. Il database, invece, ragiona per tabelle: righe e colonne, riferimenti tra tabelle. Sono due modi di pensare diversi, quasi due lingue diverse. E ogni volta che il tuo programma vuole salvare o leggere qualcosa, deve tradurre da una lingua all'altra: prendere un oggetto e spezzarlo in righe e colonne, oppure prendere righe e colonne e ricostruire un oggetto. Questa traduzione, continua e ripetitiva, è una delle attività più frequenti in assoluto quando si costruisce un'applicazione.
Voglio dirti le due strade per farla, perché è il bivio di partenza. La prima strada è farla a mano: scrivi tu, nel linguaggio del database, le istruzioni per leggere e scrivere, e poi trasformi a mano i risultati in oggetti. Hai il controllo totale, ma è un lavoro lungo, ripetitivo e pieno di occasioni per sbagliare. La seconda strada è usare uno strumento che faccia la traduzione per te: gli descrivi come le tue classi corrispondono alle tabelle, e da quel momento lavori con gli oggetti del tuo linguaggio, mentre lui, dietro le quinte, genera da solo le istruzioni per il database. Questo strumento è il mappatore, il traduttore automatico tra i due mondi.
Voglio darti la promessa, perché è seducente. La promessa del mappatore è forte: dimentica il linguaggio del database, lavora solo con gli oggetti che già conosci. Scrivi meno codice, e più chiaro. Ottieni sicurezza, perché lo strumento maneggia i dati in modo da proteggerti da certi attacchi molto comuni. E in teoria puoi persino cambiare database senza riscrivere tutto, perché è lui a parlare il dialetto giusto al posto tuo. Per queste ragioni, il mappatore è diventato lo strumento standard in quasi ogni linguaggio e ogni framework moderno. Difficile trovare un progetto serio che non ne usi uno.
Voglio darti subito anche il prezzo, perché sarebbe disonesto tacerlo. Ma questa promessa nasconde un prezzo, ed è il filo rosso di tutta la stagione. Il mappatore è una magia che nasconde la macchina. E come ogni magia che nasconde qualcosa, funziona benissimo finché tutto va liscio, ma nel momento in cui qualcosa va storto, ti ritrovi a dover capire proprio quella macchina che credevi di poter ignorare. Il codice sembra semplice, ma dietro genera istruzioni che tu non vedi, e a volte sono istruzioni disastrose. Vedremo che non puoi usare bene un mappatore senza sapere cosa fa sotto.
Voglio darti i due pilastri, perché sono la mappa della stagione. Il carattere di questo strumento poggia su due pilastri, in tensione tra loro. Il primo è il ponte tra due mondi: la comodità di lavorare con gli oggetti, la produttività, la sicurezza, la traduzione fatta per te. Il secondo è l'astrazione che perde: il fatto che, per usarlo davvero bene, devi comunque conoscere cosa c'è sotto, cioè il linguaggio del database e il database stesso. Comodità da un lato, comprensione dall'altro. Tutta la stagione vive in questa tensione.
Voglio inquadrare il senso, perché chiude un cerchio più grande. Con questa stagione mettiamo la parola fine a un lungo arco sui dati. Per cinque stagioni abbiamo studiato i database, cioè la macchina. Ora studiamo lo strato che ci sta sopra, cioè la magia. Ed è la prova più diretta della tesi che ripetiamo da sempre: capire la macchina sotto la magia. Perché con il mappatore la magia è proprio lui, e la macchina è il database che abbiamo imparato a conoscere. Chi conosce la macchina usa la magia come un acceleratore potente. Chi usa la magia per non imparare la macchina, prima o poi si schianta.
Per oggi ci fermiamo qui. Abbiamo aperto la stagione sul mappatore, il traduttore tra due mondi: gli oggetti del tuo codice e le tabelle del database, due lingue diverse da mettere continuamente in contatto. Puoi tradurre a mano, con pieno controllo ma tanta fatica, oppure lasciar fare a uno strumento che genera da solo le istruzioni per il database. La promessa è seducente: meno codice, più sicurezza, persino l'indipendenza dal database. Il prezzo è che è una magia che nasconde la macchina, e per usarla bene devi comunque conoscere cosa c'è sotto. Due pilastri: il ponte tra due mondi e l'astrazione che perde. Nella prossima puntata: l'incastro imperfetto, oggetti contro tabelle. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.