Ruby on Rails e Domain Specific Languages

Uno degli elementi che mi hanno affascinato da subito di rails e’ il modo in cui questo e’ legato al linguaggio con il quale e’ stato implementato.

Lo scorso anno c’e’ stata una continua corsa alla ricerca del “come replicare rails con …” (sostituisci i puntini con Java, PHP, Perl, …), ora questa tendenza sembra essere affievolita, forse riconoscendone l’impossibilita’.

La ragione fondamentale e’ che ruby e’ un linguaggio che ha molte caratteritiche che lo rendono perfetto per la creazione di linguaggi specializzati per un dominio (o problema).

E’ possibile ampliare e modificare il linguaggio stesso (e.g. aggiungendo pseudo parole chiave) per fare in modo che parli la lingua del problema che si sta tentando di risolvere.

Questo aiuta a descrivere ed a creare sistemi complessi, soprattutto aiuta nelle prime fasi dell’attivita di sviluppo che sono le piu difficili.E’ difficile infatti spiegare un’idea in termini che sono comprensibili agli esperti del problema ( coloro che dettano i business requirements, gli utenti, …) ma in modo che sia utilizzabile efficacemente nel seguito del processo di sviluppo (btw una metodologia che ha risolto in maniera elegante questo problema sono le Abstract States Machines).

Da questo punto di vista rails e’ in realta’ un liguaggio specifico per web-application costruito su ruby e che cattura le “best practices” per la realizzazione di applicazione internet, da quelle architetturali (e.g. il pattern ModelViewController, o l’idea di “shared nothing”) a quelle relative allo sviluppo e gestione dei progetti (la centralita’ del testing, il ruolo delle convenzioni e del naming).

Rails parla agli sviluppatori web con un tono e con parole che sono ben comprensibili ed aiuta ad accorciare la distanza dall’idea alla sua realizzazione. Rende meno arduo tradurre il modello mentale dell’applicazione in codice reale.

Guardate al suo modo di definire i modelli che e’ leggibile come descrizione in linguaggio comune (inglese) delle entita e delle relazioni tra di loro, come ad esempio (dal codice dell’applicazione http://fatturalo.com che ho realizzato):

class Invoice < ActiveRecord::Base
belongs_to :client
validates_associated :client
has_many :items, :dependent=>true, :order=>'id ASC'
has_many :received_payments, :dependent=>true, :order=>'payed_on ASC'
 
 
0 Comments. Leave a comment or send a Trackback.

 

Comment: