Sdílet prostřednictvím


Přidání vlastní ověření architektura diagramy vrstvy

V Visual Studio Ultimate a Visual Studio Premium, uživatelé mohou ověřit zdrojový kód v Visual Studio projektu proti vrstva modelu, tak můžete ověřit, zda zdrojový kód odpovídá závislostí na diagramu vrstvy.Je standardní ověřovací algoritmus, ale můžete definovat vlastní ověřovací rozšíření pro Visual Studio Ultimate a Visual Studio Premium.

Když uživatel vybere Ověřit architekturu příkaz Vrstva diagramu, je vyvolána metoda standardního ověření, následovaný žádné ověření rozšíření, které byly nainstalovány.

[!POZNÁMKA]

Ověření diagramu vrstva není stejný jako ověření v diagramech UML.V diagramu vrstvy hlavním účelem je Porovnejte diagram s programový kód v dalších částech tohoto řešení.

Rozšíření ověřování vrstvy můžete sbalit do Visual Studio integrace rozšíření (VSIX), který lze distribuovat mezi sebou Visual Studio Ultimate uživatelů.Vaše validátor VSIX můžete umístit buď sám nebo jej můžete kombinovat ve stejné VSIX jako další rozšíření.By jste napsat kód validátor ve svém vlastním Visual Studio projektu, nikoli v rámci jednoho projektu jako další rozšíření.

Poznámka k upozorněníUpozornění

Po vytvoření projektu ověření zkopírovat Příklad na konci tohoto tématu a potom upravit, aby na své vlastní potřeby.

Požadavky

  • Visual Studio Ultimate

  • Visual Studio – sada SDK

  • Visual Studio vizualizace a modelování SDK

Definování validátor vrstvy v novém souboru VSIX

Nejrychlejší způsob vytváření ověřování je použití šablony projektu.To umístí kód a VSIX manifest do stejného projektu.

Chcete-li definovat rozšíření pomocí šablony projektu

  1. Vytvoření projektu v nové řešení s použitím Nový projekt příkaz na soubor nabídky.

  2. V Nový projekt dialogovém okně vyberte v seznamu Modelování projektů, vyberte Vrstvy Návrhář ověření rozšíření.

    Šablona vytvoří projekt, který obsahuje malý příklad.

    Poznámka k upozorněníUpozornění

    Chcete-li šablony správně pracovat:

    • Upravit volání LogValidationError Chcete-li odebrat volitelné argumenty errorSourceNodes a errorTargetNodes.

    • Používáte-li vlastní vlastnosti, použití aktualizace uvedené v Přidání vlastní vlastnosti vrstvy diagramu.Před otevřením modelu řešení otevřené Průzkumníku architektury.

  3. Upravte kód, který chcete definovat vaše ověření.Další informace naleznete v tématu Programování ověření.

  4. Testování rozšíření, viz Ladění ověření vrstvy.

    [!POZNÁMKA]

    Zavolá metodu pouze za zvláštních okolností a zarážky nebudou automaticky.Další informace naleznete v tématu Ladění ověření vrstvy.

  5. Instalace rozšíření v hlavní výskyt Visual Studio, nebo v jiném počítači, vyhledejte .vsix v souboru bin\*.Zkopírujte jej do počítače, ve které chcete nainstalovat a poklepejte na něj.Chcete-li jej odinstalovat pomocí Extension Manager na Nástroje nabídky.

Přidání validátor vrstvu do samostatného souboru VSIX

Pokud chcete vytvořit jeden VSIX, obsahující validátory vrstvy, příkazů a dalších rozšíření, doporučujeme vytvořit jeden projekt, chcete-li definovat souboru VSIX a samostatné projekty pro obslužné rutiny.Informace o dalších typech modelování rozšíření naleznete v tématu Rozšíření modelů UML a diagramů.

Přidání ověřování vrstvu do samostatného souboru VSIX

  1. Vytvoření třídy knihovny projektu v nové nebo existující Visual Studio Ultimate řešení.V Nový projekt dialogové okno, klepněte na tlačítko Visual C# a potom klepněte na tlačítko Knihovny tříd.Tento projekt bude obsahovat třídu vrstvu ověřování.

  2. Určete nebo vytvořte VSIX projekt ve vašem řešení.Projekt VSIX obsahuje soubor s názvem source.extension.vsixmanifest.Máte-li přidat projekt VSIX, postupujte takto:

    1. V Nový projekt dialogové okno pole, zvolte Visual C#, rozšíření, Projekt VSIX.

    2. V Průzkumníku, v místní nabídce Projekt VSIX nastavit jako projekt při spuštění.

  3. V source.extension.vsixmanifestpod majetku, přidejte vrstvu ověření projektu jako Komponenta MEF:

    1. Zvolte nové.

    2. V Přidat nový majetek dialogové okno, nastavte:

      Typ = Microsoft.VisualStudio.MefComponent

      Zdroj = projektu v aktuálním řešení.

      Projekt = validátor projektu

  4. Je třeba přidat jako vrstvu ověřování:

    1. Zvolte nové.

    2. V Přidat nový majetek dialogové okno, nastavte:

      Typ = Microsoft.VisualStudio.ArchitectureTools.Layer.Validator.To je jedna z možností v rozevíracím seznamu.Je třeba zadat z klávesnice.

      Zdroj = projektu v aktuálním řešení.

      Projekt = validátor projektu

  5. Vraťte se do vrstvy ověření projektu a přidejte následující odkazy projektu:

    Odkaz

    Co můžete udělat

    Microsoft.VisualStudio.GraphModel.dll

    Čtení grafu architektura

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema.dll

    Čtení že DOM kód spojený s vrstvami

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

    Přečtěte si model vrstvy

    Microsoft.VisualStudio.ArchitectureTools.Extensibility

    Číst a aktualizovat obrazce a diagramy.

    System.ComponentModel.Composition

    Definovat součásti ověření pomocí Managed Extensibility Framework (MEF)

    Microsoft.VisualStudio.Modeling.Sdk.11.0

    Definování rozšíření modelování

  6. Kopírování kódu příkladu na konci tohoto tématu do souboru třídy v projektu knihovny validátor obsahuje kód pro vaše ověření.Další informace naleznete v tématu Programování ověření.

  7. Testování rozšíření, viz Ladění ověření vrstvy.

    [!POZNÁMKA]

    Zavolá metodu pouze za zvláštních okolností a zarážky nebudou automaticky.Další informace naleznete v tématu Ladění ověření vrstvy.

  8. K instalaci souboru VSIX v hlavní výskyt Visual Studio, nebo v jiném počítači, vyhledejte .vsix v souboru bin adresáře projektu VSIX.Zkopírujte jej do počítače, kde chcete nainstalovat VSIX.Poklepejte na soubor VSIX v programu Průzkumník Windows.(File Explorer v systému Windows 8.)

    Chcete-li jej odinstalovat pomocí Extension Manager na Nástroje nabídky.

Ověření programování

Chcete-li definovat rozšíření ověřování vrstvy, definujte třídu, která se vyznačuje následujícími charakteristikami:

  • Celkové prohlášení je takto:

    
    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
    using Microsoft.VisualStudio.GraphModel;
    ...
     [Export(typeof(IValidateArchitectureExtension))]
      public partial class Validator1Extension :
                      IValidateArchitectureExtension
      {
        public void ValidateArchitecture(Graph graph)
        {
           GraphSchema schema = graph.DocumentSchema;
          ...
      } }
    
  • Pokud zjistíte chybu, můžete tuto skutečnost ohlásit pomocí LogValidationError().

    Poznámka k upozorněníUpozornění

    Nepoužívejte volitelné parametry LogValidationError.

Když uživatel spustí Ověřit architekturu příkaz nabídky Vrstva za běhu systému analýzy vrstev a jejich artefaktů k vytvoření grafu.Graf má čtyři části:

  • Modely vrstvy Visual Studio řešení, které jsou reprezentovány jako uzly a odkazy v grafu.

  • Kód položky projektu a další artefakty, které jsou definované v roztoku a jsou vyjádřeny jako uzly a odkazy, které představují závislosti zjišťován procesu analýzy.

  • Propojení mezi uzly vrstvy kódových uzlů artefaktů.

  • Uzly, které představují chyby zjištěné podle validátor.

Pokud graf byla vytvořena, je zavolána metoda standardního ověření.Po dokončení této, žádné metody ověřování nainstalovanými rozšiřujícími se nazývají nespecifikované pořadí.Graf je předán pro každý ValidateArchitecture metodu, kterou lze skenovat grafu a zprávy o chybách, které nalezne.

[!POZNÁMKA]

To je stejné jako ověřovací proces, který platí pro diagramy UML a není stejný jako proces ověření pravosti, který lze použít v jazyce specifické pro doménu.

Metody ověřování neměli měnit model vrstvy nebo kód, který se ověřuje.

Diagram modelu je definována v Microsoft.VisualStudio.GraphModel.Jeho hlavní třídy jsou GraphNode a GraphLink.

Každý uzel a každý odkaz má jednu nebo více kategorií, které určují typ prvek nebo relace, která jej představuje.Uzly typické grafu mít následující kategorie:

  • Dsl.LayerModel

  • Dsl.Layer

  • Dsl.Reference

  • CodeSchema_Type

  • CodeSchema_Namespace

  • CodeSchema_Type

  • CodeSchema_Method

  • CodeSchema_Field

  • CodeSchema_Property

Odkazy z vrstev na prvky v kódu jsou kategorie, "Představuje".

Ladění ověření

Ladění vašeho rozšíření ověřování vrstvy, stiskněte kombinaci kláves CTRL + F5.Experimentální instanci Visual Studio otevře.V tomto případě otevřete nebo vytvořte vrstvu modelu.Tento model musí být spojen s kódem a musí mít alespoň jedna závislost.

Ff657807.collapse_all(cs-cz,VS.110).gifTestování roztokem, který obsahuje závislosti

Ověření není provedeno, pokud jsou k dispozici následující vlastnosti:

  • Existuje alespoň jedna závislost odkazu diagramu vrstvy.

  • Existují vrstvy v modelu, které jsou spojeny s prvky kódu.

Při prvním spuštění experimentální instanci Visual Studio k otestování vašeho rozšíření ověřování, otevřít nebo vytvořit řešení, které má tyto vlastnosti.

Ff657807.collapse_all(cs-cz,VS.110).gifSpuštění Vyčistit řešení před ověřit architekturu

Při každé aktualizaci ověřovacího kódu použít Čisté řešení příkaz na sestavení nabídky v pokusné řešení, před otestováním příkaz ověřit.To je nezbytné, protože výsledky ověřování jsou uloženy v mezipaměti.V případě, že nebyly aktualizovány diagramu testovací vrstvy nebo jeho kód, nebudou spuštěny ověřovacích metod.

Ff657807.collapse_all(cs-cz,VS.110).gifExplicitní spuštění ladicího programu

Ověřování je spuštěna v samostatném procesu.Proto nebudou body přerušení ve své metodě ověřování nastane.Je nutné připojit ladicí program k procesu explicitně po spuštění ověření.

Chcete-li připojit ladicí program k procesu ověřování, vložte volání System.Diagnostics.Debugger.Launch() na začátku své metody ověřování.Jakmile se zobrazí dialogové okno ladění, vyberte hlavní výskyt Visual Studio.

Alternativně můžete vložit volání System.Windows.Forms.MessageBox.Show().Jakmile se zobrazí okno se zprávou, přejít na hlavní výskyt Visual Studio a ladění nabídce klepněte na příkaz připojit k procesu. Vyberte proces, který se nazývá Graphcmd.exe.

Vždy stisknutím kombinace kláves CTRL + F5 spusťte experimentální instanci (Start without Debugging).

Ff657807.collapse_all(cs-cz,VS.110).gifNasazování rozšíření ověřování

Chcete-li nainstalovat rozšíření ověřování v počítači, ve kterém Visual Studio Ultimate nebo Visual Studio Premium je nainstalován, otevřete soubor VSIX na cílovém počítači.Chcete-li nainstalovat do počítače, ve kterém Team Foundation Build je nainstalován, je třeba ručně extrahovat obsah souboru VSIX do složky rozšíření.Další informace naleznete v tématu Zavedení rozšíření modelování vrstvu.

Příklad kódu

using System;
using System.ComponentModel.Composition;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.GraphModel;

namespace Validator3
{
    [Export(typeof(IValidateArchitectureExtension))]
    public partial class Validator3Extension : IValidateArchitectureExtension
    {
        /// <summary>
        /// Validate the architecture
        /// </summary>
        /// <param name="graph">The graph</param>
        public void ValidateArchitecture(Graph graph)
        {
            if (graph == null) throw new ArgumentNullException("graph");

            // Uncomment the line below to debug this extension during validation
            // System.Windows.Forms.MessageBox.Show("Attach 2 to GraphCmd.exe with process id " + System.Diagnostics.Process.GetCurrentProcess().Id);


            // Get all layers on the diagram
            foreach (GraphNode layer in graph.Nodes.GetByCategory("Dsl.Layer"))
            {
                System.Threading.Thread.Sleep(100);
                // Get the required regex property from the layer node
                string regexPattern = "^[a-zA-Z]+$"; //layer[customPropertyCategory] as string;
                if (!string.IsNullOrEmpty(regexPattern))
                {
                    Regex regEx = new Regex(regexPattern);

                    // Get all referenced types in this layer including those from nested layers so each
                    // type is validated against all containing layer constraints.
                    foreach (GraphNode containedType in layer.FindDescendants().Where(node => node.HasCategory("CodeSchema_Type")))
                    {
                        // Check the type name against the required regex                        
                        CodeGraphNodeIdBuilder builder = new CodeGraphNodeIdBuilder(containedType.Id, graph);
                        string typeName = builder.Type.Name;
                        if (!regEx.IsMatch(typeName))
                        {
                            // Log an error
                            string message = string.Format(CultureInfo.CurrentCulture, Resources.InvalidTypeNameMessage, typeName);
                            this.LogValidationError(graph, typeName + "TypeNameError", message, GraphErrorLevel.Error, layer);
                        }
                    }
                }

            }

        }
    }
}

Viz také

Koncepty

Rozšíření diagramy vrstvy