User:Angelolupo/ManyDesigns Portofino

ManyDesigns Portofino è un web application framework open source scritto in Java, il quale supporta diversi database sia commerciali sia open source, basato sul framework Struts2 MVC. Segue i principi del model-driven engineering.

Portofino e' indirizzato ai progetti di piccola e media dimensione, alla produttività e allo sviluppo in tempi brevi, e assicura qualità enterprise in termini di robustezza e manutenibilità. Con progetto piccolo, medio si intende un applicazione con un CRUD basato su 10-20 tabelle di database, uno o due workflow, differenti regole per quel che riguarda utenti, permessi, report on-line/stampati, e diverse integrazioni con sistemi esistenti.

Portofino e' sviluppato dalla ManyDesigns srl e distribuito in due modalità di licenza (dual-licensing). La licenza open source e' la GPL v3 con FLOSS exception.

Approccio model-driven
Portofino segue i principi del model-driven engineering, dello sviluppo model driven e della modellazione domain-specific. Le applicazioni sono scritte definendo dei modelli logici, i quali descrivono le strutture delle applicazioni e le loro funzionalità. In questo senso, i modelli servono allo stesso scopo dei linguaggi di programmazione, ma ad un livello più elevato di astrazione.

Modelli per domini specifici
Portofino supporta modell di vario tipo:
 * Modello dei dati: fatto di classi, attributi e relazioni, automaticamente mappato sul database (tabelle, colonne e integrità referenziale).
 * Modello dei workflow: fatto di stati, transizioni e guardie.
 * Modello utenti: fatto da un nucleo di classi che descrive gli utenti e i gruppi di utenti.
 * Modello dei permessi: l'intersezione dei dati, workflow e modello utenti, tecnicamente è implementato attraverso una matrice di permessi con lo scopo di definire il sistema di controllo degli accessi.
 * Attributi calcolati: il calcolo automatico di certi attributi su altri attributi, usando una sintassi simile ai fogli elettronici.
 * Modello dei vincoli: basato sugli attributi calcolati, gestisce la validazione dei dati e le regole semantiche che possono coinvolgere attributi multipli.
 * Modelo dei report: l'integrazione con librerie di reportistica (JFreeChart e JasperReports) in un ambiente model driven altamente produttivo.
 * Modello delle notifiche: per le comunicazioni email tra il gli eventi del sistema e gli utenti.
 * Tutti i modelli possono essere considerati specifici di domino, e il loro campo di applicazione è il dominio delle applicazioni web. Gli stessi modelli (per esempio il modello dei dati e quello dei workflow) può essere considerato come piu' generale. Comunque, in Portofino sono usati nel dominio specifico delle applicazioni web (per esempio operazioni di creazione, lettura, modifica e cancellazione).

Interfacce utente generate
Portofino genera automaticamente le interfacce utente basate sui modelli. Include:


 * form ( creazione-lettura-modifica-cancellazione)
 * navigazione delle relazioni
 * ricerche con filtri multipli flessibili
 * ricerca full-text
 * operazioni sui workflow
 * navigazione breadcrumbs
 * lettura/scrittura dei campi basati sui permessi
 * validazione dei campi
 * selezioni in cascata
 * gestione utenti
 * autoregistrazione utenti e recupero password
 * caricamento di file binari
 * cruscotti interattivi con drill-down
 * report parametrici in pdf, excel e altri formati

Supporto ai database, astrazione e refactoring
Sono supportati i seguenti database. Closed source: Open source: Portofino fornisce un livello di astrazione per il Data Definition Language (DDL). Nonostante la presenza di standard ISO, questa area e' etoregenea tra i diversi database. Il livello di astrazione isola l'utente dalle diverse differenze, includendo:
 * Oracle
 * IBM DB2
 * Microsoft SQL Server
 * MySQL
 * PostgreSQL
 * Apache Derby (come database embedded non di produzione)
 * Tipi di dati
 * Sintassi delle DDL
 * Funzionalità delle DDL (per esempio con certi database non e' possibile cambiare la dimensione di una colonna VARCHAR. Portofino in maniera trasparente permette questa operazione su tutti i database).
 * Gestione dei valori null nelle colonne univoche.Portofino assicura una compatibilità ISO a tre valori logici. Ci sono database (per esempio Microsoft SQL Server) che non supportano questa caratteristica in maniera nativa.

Portofino risolve anche i problemi di applicare cambiamenti di modelli su database che sono già popolati. Questo e' fatto con un uso intensivo di operazioni ALTER TABLE, che preservano i dati esistenti, opposto all'operazione CREATE TABLE che assume un database vuoto. Questo produce un approccio incrementale allo sviluppo, simile al refactoring, favorendo metodologie agili.

Storia
Portofino e' stato rilasciato nel 2006 come applicazione closed-source. Nel Febbrario 2009 e' stato rilasciato in open-source sotto la licenze GPL v3 con FLOSS exception. Le release principali sono state:

Portofino 1.0 (Marzo 2006): sviluppo originale, supportando Oracle e PostgreSQL. Portofino 2.0 (Gennaio 2008): Aggiunto supporto per DB2, SQL Server e MySQL. Portofino 2.0.12 (Febbraio 2009): Prima release pubblica open-source. Supporto per Derby. Portofino 3.0 (Novembre 2009): Basato su Struts2 MVC per struttura interna, estensioni e personalizzazioni. Esteso il modello utenti e auto registrazione.

Nel 2006 Portofino ha ricevuto il premio Perotto nella sezione industria.

Voci correlate

 * Web application framework
 * Model-driven engineering
 * Domain-driven design
 * Domain-specific modeling
 * Automatic programming
 * SQL

Collegamenti esterni

 * Official ManyDesigns Portofino homepage
 * Portofino project at SourceForge.net
 * Java Powered for the Enterprise directory
 * http://programmazione.it/index.php?entity=eitem&idItem=42859 (in Italian)
 * http://www.gt-logiciel-libre.org/2009/09/20-startups-innovantes-open-source-nominees-pour-les-open-innovation-awards/ (in French)

Category:Web application frameworks Category:Web development software Category:Java enterprise platform Category:Free computer programming tools