Udostępnij za pośrednictwem


Dodawanie walidacji niestandardowej architektury do diagramów warstw

W Visual Studio Ultimate i Visual Studio Premium, użytkownicy mogą sprawdzić poprawność kodu źródłowego w projekcie Visual Studio względem modelu warstwy, aby mogli zweryfikować, że kod źródłowy odpowiada zależnościom na diagramie warstwy.Istnieje algorytm standardowego sprawdzania poprawności, ale można zdefiniować własne rozszerzenia sprawdzania poprawności dla Visual Studio Ultimate i Visual Studio Premium.

Gdy użytkownik wybierze polecenie Sprawdzanie poprawności architektury na diagramie warstwy, wywoływana jest standardowa metoda sprawdzania poprawności, a następnie wszystkie rozszerzenia sprawdzania poprawności, które zostały zainstalowane.

[!UWAGA]

Sprawdzanie poprawności na diagramie warstwy nie jest takie sam, jak sprawdzanie poprawności na diagramach UML.Na diagramie warstwowym głównym celem jest porównanie diagramu z kodem programu w innych częściach rozwiązania.

Możesz spakować swoje rozszerzenie sprawdzania poprawności warstwy do Rozszerzeniu Integracji programu Visual Studio (VSIX), który można rozdystrybuować innym Visual Studio Ultimate użytkownikom.Teraz można umieścić swój moduł sam sprawdzający poprawność w VSIX lub można połączyć go w tym samym VSIX jako inne rozszerzenia.Należy wpisać kod modułu sprawdzania poprawności we własnym Visual Studio projekcie, nie w tym samym projekcie jako inne rozszerzenie.

Informacje dotyczące przestrogiPrzestroga

Po utworzeniu projektu sprawdzania poprawności, należy skopiować przykładowy kod na końcu tego tematu, a następnie edytować go do własnych potrzeb.

Wymagania

  • Visual Studio Ultimate

  • Visual Studio SDK

  • Wizualizacja Visual Studio i modelowanie SDK

Definiowanie walidatora warstwy w nowym VSIX

Najszybszą metodą tworzenia modułu sprawdzania poprawności jest użycie szablonu projektu.Te umieszcza kod i manifestu VSIX w tym samym projekcie.

Aby zdefiniować rozszerzenie przy użyciu szablonu projektu

  1. Utwórz projekt w nowym rozwiązaniu za pomocą polecenia Nowy projekt w menu Plik.

  2. W oknie dialogowym Nowy projekt w polu Projekty modelowania, wybierz opcję Rozszerzenie sprawdzania poprawności projektanta warstwy.

    Ten szablon tworzy projekt zawierający krótki przykład.

    Informacje dotyczące przestrogiPrzestroga

    Aby szablon działał prawidłowo:

    • Edytuj wywołania LogValidationError, aby usunąć opcjonalne argumenty errorSourceNodes i errorTargetNodes.

    • Jeśli używasz właściwości niestandardowych, zastosuj aktualizacje wymienione w Dodawanie właściwości niestandardowych do diagramu warstwy.Ponadto, otwórz Eksploratora architektury przed otwarciem rozwiązania modelu.

  3. Edytuj kod w celu zdefiniowania walidacji.Aby uzyskać więcej informacji, zobacz Programowanie walidacji.

  4. Aby przetestować rozszerzenie, zobacz debugowanie sprawdzania poprawności warstwy.

    [!UWAGA]

    Twoja forma będzie wywoływana tylko w szczególnych okolicznościach, a punkty przerwania nie będą działać automatycznie.Aby uzyskać więcej informacji, zobacz Debugowanie walidacji warstwowej.

  5. Aby zainstalować rozszerzenia w głównym wystąpieniu Visual Studio, lub na innym komputerze, należy znaleźć .vsix plik w bin\*.Skopiuj go do komputera, w którym chcesz go zainstalować, a następnie kliknij na nim dwukrotnie.Aby odinstalować go, należy użyć Extension Manager w menu Narzędzia.

Dodawanie warstwowego modułu walidującego do oddzielnego VSIX

Jeśli chcesz utworzyć jeden VSIX zawierający moduły sprawdzania warstwy, polecenia oraz inne rozszerzenia, zaleca się utworzenie jednego projektu do definiowania VSIX i oddzielnych projektów dla programów obsługi.Aby uzyskać informacje na temat innych rodzajów rozszerzenia modelowania, zobacz Rozszerzanie diagramów i modeli UML.

Aby dodać sprawdzanie poprawności warstwy do oddzielnego VSIX

  1. Utwórz projekt biblioteki klas w nowym lub istniejącym rozwiązaniu Visual Studio Ultimate.W oknie dialogowym Nowy projekt kliknij przycisk Visual C#, a następnie kliknij Biblioteka klas.Projekt ten będzie zawierać klasy warstwy sprawdzania poprawności.

  2. Określ lub utwórz projekt VSIX w rozwiązaniu.Projekt VSIX zawiera plik o nazwie source.extension.vsixmanifest.Jeśli trzeba dodać projekt VSIX, wykonaj następujące kroki:

    1. W oknie dialogowym Nowy projekt wybierz Visual C#, Rozszerzalność, Projekt VSIX.

    2. W Eksploratorze rozwiązań, w menu skrótów projektu VSIX, Ustaw jako projekt startowy.

  3. W source.extension.vsixmanifest w polu Majątek dodaj projekt sprawdzania poprawności warstwy jako składnik MEF:

    1. Wybierz przycisk Nowy.

    2. W oknie dialogowym Dodaj nowy zasób ustaw:

      Wpisz = Microsoft.VisualStudio.MefComponent

      Źródło = projektu w bieżącym rozwiązaniu

      Projekt = your validator project

  4. Należy także dodać go jako sprawdzanie poprawności warstwy:

    1. Wybierz przycisk Nowy.

    2. W oknie dialogowym Dodaj nowy zasób ustaw:

      Wpisz = Microsoft.VisualStudio.ArchitectureTools.Layer.Validator.Nie jest jedną z opcji na liście rozwijanej.Musisz wprowadzić to przy użyciu klawiatury.

      Źródło = projektu w bieżącym rozwiązaniu

      Projekt = your validator project

  5. Wróć do projektu warstwy sprawdzania poprawności i dodaj następujące odwołania do projektu:

    Odwołanie

    Co Ci to pozwala zrobić

    Microsoft.VisualStudio.GraphModel.dll

    Odczytaj wykres architektury

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema.dll

    Odczytać kod DOM skojarzony z warstwami

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

    Przeczytaj warstwy modelu

    Microsoft.VisualStudio.ArchitectureTools.Extensibility

    Przeczytaj i aktualizuj kształty i diagramy.

    System.ComponentModel.Composition

    Zdefiniuj składnik walidacji za pomocą Managed Extensibility Framework (MEF).

    Microsoft.VisualStudio.Modeling.Sdk.12.0

    Zdefiniuj rozszerzenia modelowania

  6. Kopiuj przykładowy kod na końcu tego tematu w pliku klasy w projekcie walidatora biblioteki, aby uwzględnić kod przy sprawdzaniu poprawności.Aby uzyskać więcej informacji, zobacz Programowanie walidacji.

  7. Aby przetestować rozszerzenie, zobacz debugowanie sprawdzania poprawności warstwy.

    [!UWAGA]

    Twoja forma będzie wywoływana tylko w szczególnych okolicznościach, a punkty przerwania nie będą działać automatycznie.Aby uzyskać więcej informacji, zobacz Debugowanie walidacji warstwowej.

  8. Aby zainstalować VSIX w w głównym wystąpieniu Visual Studio, lub na innym komputerze, należy znaleźć .vsix plik w bin katalogu projektów VSIX.Skopiuj go do komputera, w którym chcesz zainstalować VSIX.Kliknij dwukrotnie plik VSIX w Eksploratorze Windows. (Eksplorator plików w systemie Windows 8).

    Aby odinstalować go, należy użyć Extension Manager w menu Narzędzia.

Sprawdzanie poprawności programowania

Aby zdefiniować rozszerzenie warstwy sprawdzania poprawności, zdefiniujesz klasę, która ma następujące cechy:

  • Ogólny formularz zgłoszenia jest następujący:

    
    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;
          ...
      } }
    
  • Po wykryciu błędu, możesz go zgłosić za pomocą LogValidationError().

    Informacje dotyczące przestrogiPrzestroga

    Nie używaj parametrów opcjonalnych LogValidationError.

Kiedy użytkownik wywoła Sprawdzanie poprawności architektury polecenia menu, system plików środowiska uruchomieniowego warstwy analizuje warstwy i ich artefakty w celu przedstawienia ich na wykresie.Wykres ma cztery części:

  • Modele warstwy Visual Studio rozwiązania, które są reprezentowane jako węzły i łącza na wykresie.

  • Kod, elementy projektu i inne przedmioty, które są zdefiniowane w rozwiązaniu i reprezentowane jako węzły i łącza, które reprezentują zależności odnalezione przez proces analizy.

  • Łączy z węzłów warstwy do węzłów artefaktu kodu.

  • Węzły, które reprezentują błędy wykryte przez walidatora.

Gdy wykres został skonstruowany, wywoływana jest standardowa metoda sprawdzania poprawności.Po zakończeniu tej operacji, wszystkie metody sprawdzania poprawności zainstalowanych rozszerzeń są wywoływane w nieokreślonej kolejności.Wykres jest przekazywany do każdej ValidateArchitecture metody, która pozwala na skanowanie wykresu i zgłasza wszelkie błędy, które znajdzie.

[!UWAGA]

To nie jest taki sam, jak proces sprawdzania poprawności, który jest stosowany do diagramów UML i nie jest taki sam, jak proces sprawdzania poprawności, który może być używany w językach specyficznych dla domeny.

Metody sprawdzania poprawności nie powinny zmieniać warstwy modelu lub kod, który jest sprawdzany.

Model wykresu jest zdefiniowany w Microsoft.VisualStudio.GraphModel.Jego główne klasy to GraphNode i GraphLink.

Każdy węzeł i każde łącze posiada jedną lub więcej kategorii, które określają typ elementu lub relacji, który reprezentuje.Węzły typowych wykresów mają następujące kategorie:

  • Dsl.LayerModel

  • Dsl.Layer

  • Dsl.Reference

  • CodeSchema_Type

  • CodeSchema_Namespace

  • CodeSchema_Type

  • CodeSchema_Method

  • CodeSchema_Field

  • CodeSchema_Property

Łączy z warstwy do elementów w kodzie z kategorią „Reprezentuje”.

Debugowanie sprawdzania poprawności

Aby debugować rozszerzenie warstwy sprawdzania poprawności, naciśnij kombinację klawiszy CTRL + F5.Otwiera eksperymentalne wystąpienie Visual Studio.W tym wypadku otwórz lub utwórz model warstwy.Ten model musi być skojarzony z kodem i musi mieć co najmniej jedną współzależność.

Przetestuj rozwiązanie, które zawiera zależności

Sprawdzanie poprawności nie jest wykonywane, chyba że występują następujące cechy:

  • Istnieje co najmniej jedno łącze zależność w diagramie warstwy.

  • Istnieją warstwy w modelu, które są skojarzone z elementami kodu.

Przy pierwszym uruchomieniu wystąpienia doświadczalnego Visual Studio do testowania twojego rozszerzenia sprawdzania poprawności, otwórz lub utwórz rozwiązanie, które ma te cechy.

Uruchom czyste rozwiązanie przez sprawdzeniem poprawności architektury

W każdym przypadku, gdy należy zaktualizować kod sprawdzania poprawności, należy użyć Czystego rozwiązani polecenia na Kompilacji menu w eksperymentalnym rozwiązaniu, zanim zaczniesz testować polecenie sprawdzania poprawności.Jest to konieczne, ponieważ wyniki weryfikacji są buforowane.Jeśli test diagramu warstwy lub jego kod nie zostały zaktualizowane, nie można wykonać metod sprawdzania poprawności.

Jawnie uruchom program debugera

Sprawdzanie poprawności działa w oddzielnym procesie.W związku z tym punkty przerwania wybranej metody sprawdzania poprawności nie zostaną wyzwolone.Należy dołączyć debuger jawnie do proces, gdy sprawdzania poprawności zostało rozpoczęte.

Aby dołączyć debuger do procesu sprawdzania poprawności, należy wstawić numer telefonu, aby System.Diagnostics.Debugger.Launch() na początku wybranej metody sprawdzania poprawności.Gdy pojawi się okno dialogowe debugowania, wybierz wystąpienie główne Visual Studio.

Alternatywnie, można wstawić wywołanie do System.Windows.Forms.MessageBox.Show().Kiedy zostanie wyświetlone okno komunikatu, przejdź do głównego wystąpienia Visual Studio i w menu Debuguj kliknij Dołącz do procesu.Wybierz proces, który nazywa się Graphcmd.exe.

Zawsze uruchamiaj wystąpienie doświadczalne naciskając kombinację klawiszy CTRL + F5 (Uruchom bez debugowania).

Wdrażanie rozszerzenie sprawdzania poprawności

Aby zainstalować rozszerzenie sprawdzania poprawności na komputerze, na którym Visual Studio Ultimate lub Visual Studio Premium jest zainstalowany, otwórz plik VSIX na komputerze docelowym.Aby zainstalować na komputerze, na którym Team Foundation Build jest zainstalowany, należy ręcznie wyodrębnić zawartości VSIX do folderu rozszerzeń.Aby uzyskać więcej informacji, zobacz Wdrażanie rozszerzenia modelowanie warstwy.

Przykład kodu

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);
                        }
                    }
                }

            }

        }
    }
}

Zobacz też

Koncepcje

Rozszerzanie diagramów warstw