Sdílet prostřednictvím


Přidání ověření vlastní architektury do diagramů vrstev

V Visual Studio Ultimate a Visual Studio Premium uživatelé mohou ověřit zdrojový kód v projektu Visual Studio proti vrstvě modelu, abyste mohli ověřit, že zdrojový kód odpovídá závislostem na diagramu vrstvy.Existuje standardní ověřovací algoritmus, ale můžete definovat vlastní rozšíření ověřování pro Visual Studio Ultimate a Visual Studio Premium.

Když uživatel vybere příkaz Ověřit architekturu na diagramu vrstvy, je vyvolána metoda standardního ověření následovaná všemi rozšířeními ověření, která byla nainstalována.

[!POZNÁMKA]

Ověření v diagramu vrstvy není stejné jako ověření v diagramech UML.V diagramu vrstev je hlavním účelem porovnat diagram pomocí programového kódu v další části řešení.

Rozšíření ověření vrstvy můžete zabalit do rozšíření integrace Visual Studio (VSIX), které můžete distribuovat dalším uživatelům Visual Studio Ultimate.Můžete umístit svůj validátor přímo do souboru VSIX nebo ho můžete zkombinovat ve stejném souboru VSIX jako další rozšíření.Měli byste psát kód validátoru ve vlastním projektu Visual Studio, nikoli ve stejném projektu jako další rozšíření.

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

Po vytvoření projektu ověření zkopírujte vzorový kód na konci tohoto tématu a poté jej upravte dle vlastních potřeb.

Požadavky

  • Visual Studio Ultimate

  • Visual Studio – sada SDK

  • Vizualizace a sada SDK pro modelování Visual Studio

Definování ověřování vrstvy v novém souboru VSIX

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

Definování rozšíření pomocí šablony projektu

  1. Vytvořte projekt v novém řešení pomocí příkazu Nový projekt v nabídce Soubor.

  2. V dialogovém okně Nový projekt, v části Modelování projektů vyberte Rozšíření ověřování návrháře vrstev.

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

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

    Pro správnou funkčnost šablony:

    • Upravte volání LogValidationError, chcete-li odebrat volitelné argumenty errorSourceNodes a errorTargetNodes.

    • Pokud používáte vlastní vlastnosti, použijte aktualizace uvedené v Přidání vlastních vlastností do diagramu vrstev.Také otevřete Průzkumníka architektury před otevřením modelu řešení.

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

  4. Pro informace o testování rozšíření, viz Ověřování vrstvy ladění.

    [!POZNÁMKA]

    Vaše metoda bude volána pouze za zvláštních okolností a zarážky nebudou fungovat automaticky.Další informace naleznete v tématu Ladění ověřování vrstev.

  5. Chcete-li nainstalovat rozšíření v instanci hlavní aplikace Visual Studio nebo v jiném počítači, vyhledejte soubor .vsix ve složce bin\*.Zkopírujte jej do počítače, kam jej chcete nainstalovat, a poklepejte na něj.Chcete-li ho odinstalovat, použijte Správce rozšíření v nabídce Nástroje.

Přidání validátoru vrstvy do samostatného souboru VSIX

Pokud chcete vytvořit jeden VSIX, který obsahuje validátory vrstvy, příkazy a další rozšíření, doporučujeme vytvořit jeden projekt k definování VSIX a samostatné projekty pro obslužné rutiny.Informace o dalších typech rozšíření modelu naleznete v tématu Rozšiřování modelů a diagramů UML.

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

  1. Vytvořte projekt knihovny tříd v novém nebo stávajícím řešení Visual Studio Ultimate.V dialogovém okně Nový projekt klikněte na Visual C# a potom klikněte na Knihovna tříd.Tento projekt bude obsahovat třídu ověřování vrstvy.

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

    1. V dialogovém okně Nový projekt zvolte Visual C#, Rozšiřitelnost, Projekt VSIX.

    2. Průzkumníku řešení v místní nabídce projektu VSIX zvolte Nastavit jako projekt po spuštění.

  3. V source.extension.vsixmanifest, v části Majetek přidejte vrstvu ověřování projektu jako komponentu MEF:

    1. Zvolte možnost Nový.

    2. V dialogovém okně Přidat nové aktivum nastavte:

      Type = Microsoft.VisualStudio.MefComponent

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

      Projekt = your validator project

  4. Je nutné ho přidat také jako vrstvu ověřování:

    1. Zvolte možnost Nový.

    2. V dialogovém okně Přidat nové aktivum nastavte:

      Type = Microsoft.VisualStudio.ArchitectureTools.Layer.Validator.To není jedna z možností v rozevíracím seznamu.Je nutné ji zadat z klávesnice.

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

      Projekt = your validator project

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

    Odkaz

    Co vám to umožňuje provádět

    Microsoft.VisualStudio.GraphModel.dll

    Přečtěte si graf architektury

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema.dll

    Přečtěte si DOM kódu spojený s vrstvami

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

    Přečtěte si model Vrstva

    Microsoft.VisualStudio.ArchitectureTools.Extensibility

    Přečtěte si a aktualizujte tvary a diagramy.

    System.ComponentModel.Composition

    Definovat součást ověřování pomocí Managed Extensibility Framework (MEF)

    Microsoft.VisualStudio.Modeling.Sdk.12.0

    Definovat rozšíření modelování

  6. Zkopírujte ukázkový kód na konci tohoto tématu do souboru třídy v projektu knihovny ověřování, aby obsahovala kód pro ověření.Další informace naleznete v tématu Programování ověření.

  7. Pro informace o testování rozšíření, viz Ověřování vrstvy ladění.

    [!POZNÁMKA]

    Vaše metoda bude volána pouze za zvláštních okolností a zarážky nebudou fungovat automaticky.Další informace naleznete v tématu Ladění ověřování vrstev.

  8. Chcete-li nainstalovat VSIX v instanci hlavní aplikace Visual Studio nebo v jiném počítači, vyhledejte soubor .vsix ve adresáři bin projektu VSIX.Zkopírujte jej do počítače, kde chcete nainstalovat VSIX.V průzkumníku Windows poklepejte na položku VSIX. (Průzkumník souborů v systému Windows 8.)

    Chcete-li ho odinstalovat, použijte Správce rozšíření v nabídce Nástroje.

Ověření programování

K definování ověření přípony vrstvy definujete třídu, která má následující vlastnosti:

  • Celková forma deklarace je následovná:

    
    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 ji ohlásit pomocí LogValidationError().

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

    Nepoužívejte volitelné parametry LogValidationError.

Pokud uživatel vyvolá příkaz nabídky Ověřit architekturu, systém modulu runtime vrstvy zanalyzuje vrstvy a jejich artefakty k vytvoření grafu.Graf má čtyři části:

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

  • Kód, položky projektu a další artefakty, které jsou definovány v řešení a reprezentovány jako uzly a odkazy, které představují závislosti zjištěné v procesu analýzy.

  • Propojení z uzlů vrstvy do uzlů kódových artefaktů.

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

Když byl vytvořen graf, je zavolána standardní metoda ověření.Po dokončení všechny metody nainstalovaných rozšíření ověřování jsou zavolány v nespecifikovaném pořadí.Graf je předán pro každou metodu ValidateArchitecture, která může prohledávat graf a podávat zprávy o chybách, které najde.

[!POZNÁMKA]

To není stejné jako proces ověření, který je použit pro diagramy UML ani to není stejné jako proces ověření, který lze použít v jazycích specifické na doménu.

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

Model grafu je definován 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 prvku nebo vztahu, který představuje.Uzly typického grafu jsou následující kategorie:

  • Dsl.LayerModel

  • Dsl.Layer

  • Dsl.Reference

  • CodeSchema_Type

  • CodeSchema_Namespace

  • CodeSchema_Type

  • CodeSchema_Method

  • CodeSchema_Field

  • CodeSchema_Property

Propojení z vrstev do prvků v kódu mají kategorii „Představuje“.

Ladění ověřování

Chcete-li ladit rozšíření ověřování vrstvy, stiskněte CTRL + F5.Otevře se experimentální instance Visual Studio.V tomto případě otevřete nebo vytvořte model vrstev.Tento model musí být přidružen ke kódu a musí mít alespoň jednu závislost.

Otestujte řešení, které obsahuje závislosti

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

  • Na diagramu vrstvy je alespoň jeden odkaz závislosti.

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

Při prvním spuštění experimentální instance Visual Studio k testování rozšíření ověřování otevřete nebo vytvořte řešení, které má tyto vlastnosti.

Spusťte čisté řešení před ověřením architektury

Pokaždé, když aktualizujete kód pro ověření, použijte příkaz Vyčistit řešení v nabídce Sestavení v experimentálním řešení před otestováním příkazu Ověřit.To je nezbytné, protože výsledky ověření jsou ukládány do mezipaměti.Pokud jste neaktualizovali diagram testovací vrstvy nebo jeho kód, nebudou provedeny ověřovací metody.

Spustit ladicí program explicitně

Ověřování je spuštěno v samostatném procesu.Body přerušení ve vaší metodě ověřování tedy nebudou aktivovány.Po spuštění ověření je nutné připojit ladicí program k procesu explicitně.

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í.Pokud se zobrazí dialogové okno ladění, vyberte hlavní instanci Visual Studio.

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

Experimentální instanci vždy spusťte stisknutím kombinace kláves CTRL + F5 (Spustit bez ladění).

Nasazení rozšíření ověřování

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

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í diagramů vrstev