Sviluppo Model-Driven

datemartedì 30 settembre 2008 alle 18.16  - posted by Manuel Scapolan in Software Architecture

Un argomento molto dibattuto in questi mesi è lo sviluppo di software a partire dalla definizione di modelli astratti. Un tentativo di portare il processo di sviluppo software verso un livello più alto eliminando quasi completamente la scrittura di codice e forse la figura del programmatore così come la conosciamo oggi. Questa corrente di pensiero ha portato alla definizione di diverse metodologie tra cui MDSD e MDA.
Parlando di Model Driven Software Development (MDSD) cito Martin Fowler:

Model Driven Software Development (MDSD) is a style of software development that considers itself as an alternative to the traditional style of programming. The approach centers itself on building models of a software system. These models are typically made manifest through diagrammatic design notations - the UML is one option. The idea is that you use these diagrams, to specify your system to a modeling tool and then you generate code in a conventional programming language.

L'idea di fondo è quella di definire un modello software attraverso diagrammi astratti dai quali poter ottenere completamente o parzialmente il codice sorgente tramite tool o sistemi di generazione automatica.
Tale filosofia è condivisa da MDA (Model Driven Architecture) che differisce sostanzialmente da MDSD per il fatto che considera il modello del tutto astratto ed indipendente sia dalla piattaforma di sviluppo che dal linguaggio che si vuole utilizzare.
Per avere un'idea più precisa dello stato dell'arte vi consiglio di dare una occhiata ad iQgen uno dei tool più diffusi attualmente scritto 100% in Java.
Purtroppo questi tool hanno ed impongono ancora parecchi limiti tra i quali:

  • Il tempo dedicato al mantenimento e allo sviluppo dell'architettura e di gran lunga maggiore rispetto al tempo risparmiato con la generazione del codice.
  • I diagrammi che definiscono il modello software, essendo astratti rispetto al codice prodotto, complicano il debugging ed il versioning dell'applicazione.
  • Le modifiche al codice sono possibili, ma devono essere poi riportate nel diagramma con la difficoltà di riconoscere dove intervenire.
  • La necessità di definire dei template di generazione del codice complica notevolmente (se non impedisce) l'utilizzo di codice sorgente esistente come ad esempio framework open source quali Hibernate, Spring, etc.
  • Lo sviluppo rischia di diventare dipendente dal tool di disegno utilizzato per i diagrammi di modello.


In conclusione possiamo tirare un sospiro di sollievo e rimandare per ora il momento in cui i programmi manderanno in pensione il programmatore. ;-)

Database: tabelle temporanee in PL/SQL

datelunedì 8 settembre 2008 alle 20.48  - posted by Manuel Scapolan in Database

Può essere di grande aiuto in alcune operazioni SQL avere a disposizione tabelle intermedie su cui salvare dei risultati per una successiva elaborazione. Quando lavoriamo con database Oracle abbiamo a diposizione due soluzioni.
Possiamo creare delle tabelle temporanee globali direttamente con un CREATE TABLE, oppure ricorrere a variabili di tipo tabella. La prima soluzione è utile nel caso di manipolazione di grandi quantità di dati e ci permette di decidere se lasciare o meno i dati in tabella conclusa la sessione. Vediamo la sintassi PL/SQL:

CREATE GLOBAL TEMPORARY TABLE tempPhoneBookTable
(
   name VARCHAR2(40),
   surname VARCHAR2(60),
   phoneNumber VARCHAR2(15)
) ON COMMIT PRESERVE ROWS; --preserve data after commit

Per approfondire l'argomento sulle tabelle temporanee globali vi consiglio l'ottimo articolo di Don Burleson su come utilizzare le tabelle temporanee per aumentare le performance di una query.

La seconda soluzione consente di definire variabili di tipo tabella direttamente all'interno dello statement o della procedura e di utilizzare metodi specifici per manipolare i dati della collezione. In Oracle le variabili di tipo tabella possono essere paragonate a tabelle di database ad una sola colonna. Nella dichiarazione della variabile devo quindi indicare il tipo di dato da memorizzare. In alcuni casi, come nell'esempio seguente, avrò bisogno di più colonne, devo ricorrere quindi all'utilizzo dei record:

SET serveroutput ON
DECLARE
--define a record
TYPE contact IS RECORD (
    name VARCHAR2(40),
    surname VARCHAR2(60),
    phoneNumber VARCHAR2(15)
    );
--define a table composed of records
TYPE phoneBook IS TABLE OF contact
   INDEX BY BINARY_INTEGER;
 
--declare a TABLE variable of this type
myPhoneBook phoneBook;
counter INTEGER :=1;
    
BEGIN
    myPhoneBook(1).name := 'Manuel';
    myPhoneBook(1).surname := 'Scapolan';
    myPhoneBook(1).phoneNumber := '555-5555';
    
    myPhoneBook(2).name := 'Mario';
    myPhoneBook(2).surname := 'Rossi';
    myPhoneBook(2).phoneNumber := '666-66666';
      
    WHILE myPhoneBook.EXISTS(counter) LOOP
    dbms_output.put_line(myPhoneBook(counter).surname || ' ' 
        || myPhoneBook(counter).name || ' tel. ' 
        || myPhoneBook(counter).phoneNumber);
    counter := counter+1;
    END LOOP;
END;
/

tagsTags: ,

About me

manuel scapolanSono un consulente informatico. Nel 2004 terminati gli studi in Ingegneria Informatica (1° livello), ho iniziato come freelance collaborando con una ditta di consulenza informatica ed una agenzia di marketing e comunicazione nello sviluppo di applicazioni web. Attualmente divido il lavoro di sviluppatore e progettista web con attività di formazione nel settore della programmazione.
View Manuel Scapolan's profile on LinkedIn

Follow me on Follow manuelscapolan on Twitter

Calendario


<<  agosto 2010  >>
lumamegivesado
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

Disclaimer

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:
creative commons
Attribuzione: Non commerciale
Condividi allo stesso modo. R.2.5

Books (a bit more about my library)

Domain Driven Design - Eric Evans Applying Domain-Driven Design and Patterns - Jimmy Nilsson Refactoring to Patterns - Joshua Kerievsky Design Patterns -  Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Code Complete Second Edition - Steve McConnell Patterns of Enterprise Application Architecture - Martin Fowler Agile Principles, Patterns, and Practices in C# - Robert C. Martin xUnit Test Patterns - Gerard Meszaros Refactoring - Martin Fowler CLR via C# Second Edition - Jeffrey Richter Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries - Krzysztof Cwalina, Brad Abrams Don't make me think! - Steve Krug Bulletproof Ajax - Jeremy Keith

Manuel Scapolan Copyright © 2007 - 2010 - Tutti i diritti riservati - Powered by BlogEngine.NET 1.5.0.7 - silk icons by famfamfam - Time CET