Generazione di codice

Il team può rispondere molto rapidamente e in modo affidabile alle modifiche dei requisiti utente mediante la generazione di codice dai modelli personalizzati.Se il team sviluppa una linea di prodotti simili o si basa su modelli utilizzati di frequente, la generazione di codice risulta particolarmente efficace.

Il team può generare codice di programma, schemi, documenti, risorse e altri elementi di qualsiasi tipo.Il team può scrivere modelli di testo da utilizzare per interrogare il modello tramite l'API UML (Unified Modeling Language).Per ulteriori informazioni, vedere Procedura: generare file da un modello UML.

Nella maggior parte dei casi, il team non genererà tutto il codice dai modelli.Utilizzando tecniche quali le classi parziali, il team può mantenere il codice generato separato dal codice scritto a mano.Non modificare mai il codice generato.Aggiornare invece il modello che, a sua volta, aggiornerà il codice.

La generazione di codice è utile nelle situazioni seguenti:

  • Linee di prodotti.Fabrikam, Inc.fabbrica e installa sistemi di gestione dei bagagli per gli aeroporti.Gran parte del software è molto simile nelle diverse installazioni, ma la configurazione del software varia in base al macchinario di gestione dei bagagli installato e dalla modalità di interconnessione delle varie parti mediante nastri trasportatori.All'inizio di un contratto il team di Fabrikam discute i requisiti con la società che gestisce l'aeroporto e delinea il piano per i nastri trasportatori tramite un diagramma di attività UML.Da questo modello il team genera file di configurazione, codice di programma, piani e manuali dell'utente.Il lavoro viene completato con aggiunte e modifiche manuali apportate al codice.Acquisendo esperienza da un progetto all'altro, ampliano l'ambito del materiale generato.

  • Criteri.Gli sviluppatori di Contoso, Ltd creano spesso siti Web.Progettano lo schema di navigazione tramite diagrammi classi UML e utilizzano classi e associazioni per rappresentare le pagine Web e i collegamenti di navigazione.Gran parte del codice del sito Web può essere generato.Ogni pagina Web corrisponde a diverse classi e voci di file di risorse conformi a un modello uniforme.Il risultato è più affidabile e flessibile rispetto al codice scritto a mano.

  • Schemi.Humongous Insurance ha migliaia di sistemi in tutto il mondo.In questi sistemi vengono utilizzati database, linguaggi e interfacce di diversi tipi.Il team dell'architettura centrale pubblica internamente modelli di concetti e processi aziendali.I diagrammi semplificano la discussione delle progettazioni.Da tali modelli i team locali possono generare parti di schemi di database e XML Schema, dichiarazioni in C# e altri elementi.

Linguaggi di modellazione personalizzati

Negli esempi precedenti ogni società utilizza i propri modelli in modo molto specifico.Sebbene sia possibile rappresentare il tracciamento bagagli utilizzando un diagramma di attività, è preferibile utilizzare una notazione formale di tracciamento bagagli.In Visual Studio sono supportati gli approcci seguenti:

  • Personalizzare un diagramma UML con stereotipi.Gli stereotipi consentono di differenziare diversi tipi di elementi (ad esempio, distinguere gli sportelli di check-in dalle postazioni a raggi X) e registrare i valori dell'attributo aggiuntivi in ogni elemento.Per ulteriori informazioni, vedere Procedura: definire un profilo per estendere UML.

  • Progettare il proprio linguaggio specifico di dominio (DSL).Se si eseguono molte operazioni nel dominio di destinazione, lo sforzo aggiuntivo richiesto potrebbe compensare ampiamente l'adattamento più specifico alle proprie esigenze.Per ulteriori informazioni, vedere SDK di visualizzazione e modellazione (linguaggi specifici di dominio).

Il team può creare comandi di menu, test di convalida ed elementi della casella degli strumenti per entrambi i tipi di modelli tramite Visual Studio SDK.È inoltre possibile compilare le estensioni di Visual Studio che consentono di integrare i diagrammi e associarli a risorse esterne quali i database.