PlantUML diagramy zapisane tekstem

Żeby być modnym trzeba teraz być w DNA :D
Modna nie jestem, ale DNA to ciekawa inicjatywa dla mnie, poskładać wiedzę, uzupełnić braki.
Jeszcze lepiej, że akurat mam żywy projekt na którym mogę się uczyć.

Pierwsza praca domowa to stworzenie diagramów C4.
Idealnie, pierwsze dwa poziomy to bardzo proste diagramy, łatwo je stworzyć.
Panowie z kursu polecają narzędzie: Structurizr 
Srsly, próbowałam. Niby jest darmowa wersja, są nawet przykładowe diagramy, ale nie ma do nich kodu. Jak już znalazłam, gdzie możne edytować diagram okazało się, że w ogóle nie znam języka, ani narzędzia i chce tym rzucić w kont i nie wrócić nigdy.

I właściwie to tak zrobiłam.

PlantUML

Jest natomiast inne narzędzie, które uwielbiam. PlantUML.
UMLa znam od studiów, ale nie tak, że coś o tym słyszałam. Gang czworga to bohaterowie mojej pracy dyplomowej. Dlatego jest mi łatwo czasem narysować jakiś diagram, aby coś sobie w głowie poukładać. Ostatnio robiłam sporo diagramów sekwencji. I przy tej okazji znalazłam PlantUML.

PlantUml to niezależne narzędzie, które potrafi generować diagramy na podstawie zapisu w dość prostym języku. Ale najlepsze zaczyna się gdy podepniemy PlantUml do Visual Studio Code Visual Studio Code extension PlantUML.
Teraz ten prosty język i zapis w plikach tekstowych w połączeniu z repozytorium git, stają się idealnym zestawem do generowania często zmieniającej się dokumentacji.
PlantUml można też osadzać w plikach MD i obrazki do naszej wiki generują się same z zawsze aktualnego diagramu.

A tutaj diagram sekwencji dla rejestracji urządzenia przez Device Provisioning Service.


Niestety gist nie obsługuje tej składni dlatego bezpośreni skrypt do powyższego diagramu:

@startuml register device
skinparam participant {
    FontColor          black
    AttributeFontColor black
    FontSize           17
    AttributeFontSize  15
    AttributeFontname  Droid Sans Mono
    BackgroundColor    #b9e1fa
    BorderColor        black
    ArrowColor         #222266
}
    participant DeviceManufacture
    participant Device
    participant IoTHub
    participant DeviceProvisioningService
== Manufacturing Device ==
activate DeviceManufacture
activate Device
    DeviceManufacture -> Device: 'Device manufacturing, install software'
    DeviceManufacture -> Device: 'create & install device specific certificate'
    DeviceManufacture -> Device : Set DPS indentity & registration URL
deactivate DeviceManufacture
== Device first connection ==
    Device -> Device : turn on: online
activate DeviceProvisioningService    
    Device -> DeviceProvisioningService: get online, connect to registration ULR
    DeviceProvisioningService -> DeviceProvisioningService: validate device with enrollment list
    DeviceProvisioningService -> IoTHub: auto-provision Device 
activate IoTHub    
    DeviceProvisioningService -> Device: set Device settings
deactivate DeviceProvisioningService

    Device -> IoTHub: Send lifecycle events
    Device -> IoTHub: Send telemetry
    Device <-> IoTHub: Update Device Twin settings
@enduml

PlantUml to nie tylko diagramy UML

Piękne w PlantUML jest jego otwartość i rozszerzalność. Dzięki temu mamy dużo nowych elementów do dyspozycji. Np. elementy diagramów C4 czyli C4-PlantUML

Mamy do dyspozycji:
Person, Person_Ext, System, System_Ext, Container, Relationship, Boundary, System_Boundary, ContainerDb, Container_Boundary


Oraz kod diagramu

@startuml C4_Elements
' left to right direction
Person(personAlias"Label""Optional Description")
System_Boundary(systemBoundryAlias"Label"){
    System(systemAlias"Label""Optional Description")
    Container_Boundary(containerBoundryAlias"Label"){
        Container(containerAlias"Label""Technology""Optional Description")
        ContainerDb(containerDbAlias"Label""Technology""Optional Description")
    }
}
Rel_Back_Neighbor(personAliascontainerAlias"Label""Optional Technology")
System_Ext(systemExtAlias,"Label""Optional Description")
Rel(systemAlias,systemExtAlias,"Label")
' Still we can use normal relations like this
containerAlias <-> containerDbAlias
@enduml


Zdecydowanie wolę tworzyć C4 w VSCode, jako plik, który mogę edytować i ciągle generować nowe widoki. Być może to zbyt duże przywiązanie do narzędzi programistycznych jak na architekta. Ale w końcu ja jestem tylko skromnym ogrodnikiem.

Komentarze

Popularne posty