Personalizzare ed estendere un linguaggio specifico del dominio
Visual Studio Modeling and Visualization SDK (VMSDK) offre diversi livelli in cui è possibile definire gli strumenti di modellazione:
Definire un linguaggio specifico del dominio usando il diagramma di definizione DSL. È possibile creare rapidamente un linguaggio DSL con una notazione diagrammatica, un modulo XML leggibile e gli strumenti di base necessari per generare codice e altri artefatti. Per altre informazioni, vedere How to Define a Domain-Specific Language.For more information, see How to Define a Domain-Specific Language.
Ottimizzare il linguaggio DSL usando funzionalità più avanzate della definizione DSL. Ad esempio, è possibile visualizzare collegamenti aggiuntivi quando l'utente crea un elemento. Queste tecniche vengono ottenute principalmente nella definizione DSL e alcune richiedono alcune righe di codice di programma.
Estendere gli strumenti di modellazione usando il codice del programma. VMSDK è progettato in modo specifico per facilitare l'integrazione delle estensioni con il codice generato dalla definizione DSL. Per altre informazioni, vedere Scrittura di codice per personalizzare un linguaggio specifico del dominio.
Nota
Dopo aver aggiornato il file delle definizioni DSL, non dimenticare di fare clic su Trasforma tutti i modelli nella barra degli strumenti di Esplora soluzioni prima di ricompilare la soluzione.
Informazioni di riferimento su articoli
Per ottenere questo effetto | Fare riferimento a questo argomento |
---|---|
Consentire all'utente di impostare le proprietà di colore e stile di una forma. | Fare clic con il pulsante destro del mouse sulla classe forma o connettore, scegliere Aggiungi esposto e fare clic su un elemento. |
Le diverse classi di elementi del modello hanno un aspetto simile nel diagramma, condividendo proprietà come altezza e larghezza iniziali, colore, descrizioni comando. | Usare l'ereditarietà tra forme o classi del connettore. I mapping tra forme derivate e classi di dominio derivate ereditano i dettagli di mapping degli elementi padre. In alternativa, eseguire il mapping di classi di dominio diverse alla stessa classe di forma. |
Una classe di elemento del modello viene visualizzata da contesti di forme diversi. | Eseguire il mapping di più classi di forme alla stessa classe di dominio. Quando si compila la soluzione, seguire la segnalazione degli errori e specificare il codice richiesto per decidere quale forma usare. |
Il colore della forma o altre caratteristiche, ad esempio il tipo di carattere, indicano lo stato corrente. | Vedere Aggiornamento di forme e Connessione or per riflettere il modello. Creare una regola che aggiorna le proprietà esposte. Vedere Le regole propagano le modifiche all'interno del modello. In alternativa, usare OnAssociatedPropertyChanged() per aggiornare funzionalità non esposte, ad esempio frecce di collegamento o tipo di carattere. |
L'icona sulla forma cambia per indicare lo stato. | Impostare la visibilità del mapping dell'elemento Decorator nella finestra Dettagli DSL. Individuare più elementi decoratori di immagine nella stessa posizione. Vedere Aggiornamento di forme e Connessione or per riflettere il modello. In alternativa, eseguire l'override di ImageField.GetDisplayImage() . Vedi l'esempio in ImageField. |
Impostare un'immagine di sfondo su qualsiasi forma | Eseguire l'override di InitializeInstanceResources() per aggiungere un oggetto ImageField ancorato. |
Annidare forme a qualsiasi profondità | Configurare un albero di incorporamento ricorsivo. Definire BoundsRules per contenere le forme. |
Collegare connettori a punti fissi sul limite di un elemento. | Definire gli elementi del terminale incorporati, rappresentati da porte di piccole dimensioni nel diagramma. Usare BoundsRules per correggere le porte sul posto. Vedere l'esempio di Diagramma circuito in Visualizzazione e Modellazione SDK. |
Il campo di testo visualizza un valore derivato da altri valori. | Eseguire il mapping dell'elemento decorator di testo a una proprietà di dominio calcolata o personalizzata Archiviazione. Per altre informazioni, vedere Proprietà Archiviazione calcolate e personalizzate. |
Propagare le modifiche tra gli elementi del modello o tra forme | Vedere Convalida in un linguaggio specifico del dominio. |
Propagare le modifiche alle risorse, ad esempio altre estensioni di Visual Studio all'esterno dell'archivio. | Vedere I gestori eventi propagano le modifiche all'esterno del modello. |
Nella finestra proprietà vengono visualizzate le proprietà di un elemento correlato. | Configurare l'inoltro delle proprietà. Vedere Personalizzazione della finestra Proprietà. |
Categorie di proprietà | La finestra delle proprietà è suddivisa in sezioni denominate categorie. Impostare la categoria delle proprietà del dominio. Le proprietà con lo stesso nome di categoria verranno visualizzate nella stessa sezione. È anche possibile impostare la categoria di un ruolo di relazione. |
Controllare l'accesso utente alle proprietà del dominio | Impostare Is Browsable false per impedire la visualizzazione di una proprietà di dominio nel Finestra Proprietà in fase di esecuzione. È comunque possibile eseguirne il mapping agli elementi decorator di testo. Is UI Read Only impedisce agli utenti di modificare una proprietà di dominio. L'accesso al programma alla proprietà di dominio non è interessato. |
Modificare il nome, l'icona e la visibilità dei nodi in Esplora modelli DSL. | Vedere Personalizzazione di Esplora modelli. |
Abilitare copia, taglia e incolla | Impostare la proprietà Abilita copia incolla del nodo Editor in Esplora DSL. |
Copiare i collegamenti di riferimento e le relative destinazioni ogni volta che viene copiato un elemento. Ad esempio, copiare Commenti associati a un elemento. | Impostare la proprietà Propagates Copy del ruolo di origine (rappresentata dalla riga a un lato della relazione di dominio nel diagramma di definizione DSL). Scrivere codice per eseguire l'override di ProcessOnCopy per ottenere effetti più complessi. Vedere Personalizzazione del comportamento di copia. |
Eliminare, replicare o ricollegare gli elementi correlati quando viene eliminato un elemento. | Impostare il valore Propagates Delete di un ruolo di relazione. Per effetti più complessi, eseguire l'override ShouldVisitRelationship e ShouldVisitRolePlayer i metodi nella MyDslDeleteClosure classe , definiti in DomainModel.cs. |
Mantieni il layout e l'aspetto della forma in copia e trascinamento. | Aggiungere le forme e i connettori all'oggetto copiato ElementGroupPrototype . Il metodo più pratico per eseguire l'override è ElementOperations.CreateElementGroupPrototype() Vedere Personalizzazione del comportamento di copia. |
Incollare le forme in una posizione prescelta, ad esempio la posizione del cursore attuale. | Eseguire l'override ClipboardCommandSet.ProcessOnCopy() per usare la versione specifica del percorso di Vedere Personalizzazione del ElementOperations.Merge(). comportamento di copia. |
Creare collegamenti aggiuntivi incollare | Eseguire l'override degli AppuntiCommandSet.ProcessOnPasteCommand() |
Abilitare il trascinamento della selezione da questo diagramma, altri DSLs e elementi di Windows | Vedere Procedura: Aggiungere un gestore di trascinamento della selezione |
Consente di trascinare una forma o uno strumento in una forma figlio, ad esempio una porta, come se fosse stata trascinata nell'elemento padre. | Definire una direttiva Element Merge nella classe oggetto di destinazione per inoltrare l'oggetto eliminato all'elemento padre. Vedere Personalizzazione della creazione e dello spostamento degli elementi. |
Consente di trascinare una forma o uno strumento in una forma e di creare collegamenti o oggetti aggiuntivi. Ad esempio, per consentire l'eliminazione di un commento in un elemento a cui deve essere collegato. | Definire una direttiva element merge nella classe di dominio di destinazione e definire i collegamenti da generare. In casi complessi, è possibile aggiungere codice personalizzato. Vedere Personalizzazione della creazione e dello spostamento degli elementi. |
Creare un gruppo di elementi con uno strumento. Ad esempio, un componente con un set fisso di porte. | Eseguire l'override del metodo di inizializzazione della casella degli strumenti in ToolboxHelper.cs. Creare un prototipo EGP (Element Group Prototype) contenente gli elementi e i relativi collegamenti di relazione. Vedere Personalizzazione degli strumenti e della casella degli strumenti. Includere le forme principale e porta in EGP oppure definire BoundsRules per posizionare le forme della porta quando viene creata un'istanza di EGP. |
Usare uno strumento di connessione per creare un'istanza di diversi tipi di relazione. | Aggiungere le direttive Connessione collegamento (LCD) al generatore di Connessione ion richiamato dallo strumento. I LCD determinano il tipo della relazione dai tipi dei due elementi. Per farlo dipendere dagli stati degli elementi, è possibile aggiungere codice personalizzato. Vedere Personalizzazione degli strumenti e della casella degli strumenti. |
Strumenti permanenti: l'utente può fare doppio clic su qualsiasi strumento per creare molte forme o connettori in successione. | In Esplora DSL selezionare il Editor nodo. Nella Finestra Proprietà impostare Usa elementi della casella degli strumenti permanenti. |
Definire i comandi di menu | Vedere Procedura: Modificare un comando di menu standard |
Vincolare il modello con le regole di convalida | Vedere Convalida in un linguaggio specifico del dominio |
Generare codice, file di configurazione o documenti da un linguaggio DSL. | Generazione di codice da un linguaggio specifico di dominio |
Personalizzare la modalità di salvataggio dei modelli nel file. | Vedere Personalizzazione di Archiviazione file e serializzazione XML |
Salvare i modelli in database o in altri supporti. | Eseguire l'override di YourLanguageDocData Vedere Personalizzazione di Archiviazione file e serializzazione XML |
Integrare diversi DSLS in modo che funzionino come parte di un'applicazione. | Vedere Integrazione di modelli con Visual Studio Modelbus. |
Consentire l'estensione DSL da parte di terze parti e controllare l'estensione. | Estendere il DSL mediante MEF Condivisione di classi tra DSL usando una libreria DSL Definizione di un criterio di blocco per creare segmenti di sola lettura |
Contenuto correlato
- Come definire un linguaggio specifico di dominio
- Scrittura di codice per personalizzare un linguaggio specifico del dominio
- SDK di modellazione per Visual Studio (linguaggi specifici di dominio)
Nota
Il componente Trasformazione modello di testo viene installato automaticamente come parte del carico di lavoro sviluppo di estensioni di Visual Studio. È anche possibile installarlo dalla scheda Singoli componenti di Programma di installazione di Visual Studio, nella categoria SDK, librerie e framework. Installare il componente Modeling SDK dalla scheda Singoli componenti .