[PL] Visual Studio 2010 – modelowanie i analiza architektury

Znalazłem chwilkę czasu, aby pobawić się dogłębniej przyszłym Visual Studio.

Prezentacje Camerona Skinnera z PDC08 utrwaliły mi się tak mocno w głowie, że pierwszą rzeczą jaką postanowiłem przetestować to nowe możliwości jakie mogą się przydać projektantom/architektom.

Po uruchomieniu środowiska od razu dostrzegłem nowy typ projektu jaki jest dostępny w VS2010:

image

Modelling Project może zawierać tylko i wyłącznie diagramy.
Pusty projekt otwiera się z Eksploratorem UML zawierającym drzewiastą strukturę stworzonych przez nas obiektów w poszczególnych typach diagramów.

Skoro mowa o UML, to rozpisując możliwości dotyczące projektowania, należy wymienić poniższe cechy:

UML:

  • Aktywności (Activity Diagram)
  • Komponenty (Component Diagram)
  • Klasy (Class Diagram)
  • Sekwencje (Sequence Diagram)
  • Przypadki użycia (Use Case Diagram)

Oraz luźno:

  • Warstwy logiczne w aplikacji (Layer Diagram)
  • Relacje pomiędzy klasami .NET (Class Diagram)
  • Sekwencje wywołań w klasach .NET (Sequence Diagram)

Swoją zabawę rozpocząłem od diagramu warstw. Zaprojektowałem sobie wybujały system, trochę wzorując się na architekturze Dynamics CRM (ale śladowo).

image

Nie wnikajmy czy ten diagram jest merytorycznie poprawny. Jeśli nie to może nawet i lepiej. Na etapie prototypowania właśnie to co mogę z nim zrobić najbardziej mi się podoba.
Tutaj rozpocząłem od pustego projektu, wymyśliłem sobie architekturę jaka chodzi mi po głowie i co mogę z tym dalej zrobić?

Mogę oczywiście zakładać dodatkowe już realne projekty i przypisywać do warstw. Jeśli jakakolwiek warstwa zawiera przypisania do konkretnego kodu to taką informację od razu widzę wizualnie:

image

W ten sposób bardzo szybko mogę wyodrębnić martwe lub niezaadresowane byty, które sobie jako architekt wymyśliłem. Gdy zaznaczę poszczególny obiekt na diagramie to mogę podejrzeć co jest do niego przypisane. Obok Solution Explorera mam Layer Explorer:

image 

To może działać w dwie strony. Mam jednocześnie szybki podgląd czy kod jest dobrze przypisany. Mogę też oczywiście bardzo sprawnie dodawać nowe projekty, przestrzenie nazw czy klasy, jeśli do tej pory ich nie uwzględniłem.

Jak widzicie wyżej diagram warstw uwzględnia relacje pomiędzy warstwami (strzałeczki), to może być jedno lub dwukierunkowa zależność.

Po przypisaniu kodu do odpowiednich warstw mam możliwość zweryfikowania poprawności mojej architektury:

image image

Jak wszystko pójdzie dobrze, to komunikat jest prosty (prawy rysunek).
Od razu widać, ze do każdego elementu można dodać zadania (work itemy) w TFS. Samą weryfikację architektury oczywiście też można połączyć z procesami serwerowymi (automated build i warunki do builda).

Walidacja architektury jest uwzględniona w MS Build. W właściwościach pliku .layer, zobaczycie nowy Build Action: Validate oraz bezpośrednio przy składni MSBuild: msbuild /t:ValidateArchitecture

Załóżmy teraz wariant w drugą stronę. Nie chcę weryfikować poprawności architektury w kodzie. Mam już duży projekt, który napewno ma już jakąś architekturę. Chciałbym szybko narysować to co autorzy mieli na myśli przez lata developmentu, przypisać projekty, przestrzenie nazw i klasy do odpowiednich warstw. Nie ustawiam zależności.

Chcę zrobić test czy aktualny kod, który już rozwijałem jest zgodny z pierwotnym zamysłem. Mogę wybrać opcję "Generate Dependencies” i na podstawie istniejącego kodu będę miał stworzone powiązania odpowiadające rzeczywistości. To potem mogę oczywiście poprawiać, gdy namierzę niezgodności.

Z innych opcji pomocnych przy analizie i pracy nad czystością architektury.
W VS2010 mamy kolejną nową opcję, o której już zdąrzyłem trochę opowiedzieć w Krakowie – Architecture Explorer.

image

Za pomocą tego narzędzia naprawdę szybko mogę nawigować po istniejącej bazie kodu. Za pomocą operacji drag&drop mogę przerzucać interesujące mnie fragmenty do odpowiednich warstw.

Wykonałem tę żmudną robotę, ale nie jestem zadowolony z wyniku.
Architecture Explorer jest fantastyczny, ale nie zawsze do końca czytelny jak tak skaczę pomiędzy poszczególnymi listami.

Chciałbym innych narzędzi wizualizacyjnych. Co robię? Wybieram poniższą opcję:
image

.. i wizualizuję zależności wywołań po assemblies, przestrzeniach nazw czy klasach. Prosty wynik na początkowym stadium projektu Entity Framework:

image
image

Napracowałem się i dałem ciała.. kod wciąż nie jest zgodny z myślą demiurga-architekta. Jak wspomniałem sprawne wykorzystanie MSBuild’a da mi jasny sygnał źle wykonanej roboty:

 image

Powyższe operacje dotknęły w sumie tylko jednego nowego diagramu – diagramu warstw, na którym chciałem sobie popracować. Jak wspomniałem jest jeszcze dosyć szeroko uwzględniony UML, ale to już omówię innym razem.

Technorati Tagi: Polish posts,Visual Studio 2010,coding,architecture