Показать сообщение отдельно
  #21 (permalink)  
Старый 16.08.2012, 23:14
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Gozar
А по моему вполне реально такой парсер написать.
Основываясь только на именах - реально. Но всплывает много кейсов. Например, откуда парсер будет знать, что возвращает require? Конечно, можно ограничиваться именами, но как-то мало от этого пользы получается.

Если бы ты развил мысль на наглядном абстрактном примере... Т.е. код и полученная схема.

Ещё для такого парсера нужно брать какой-нибудь готовый статический анализатор. Ну и без поддержки JSDoc толку будет мало.

Цены бы не было такому парсеру, если бы он генерировал алгоритм наподобие этого:


Есть ещё один важный момент. Что бы диаграмма была более читабельной, необходимо иметь возможность управлять логикой её генерации. Например здесь описана такая возможность, в разделе "Changing arrow direction". По опыту могу сказать, что без этого будет получаться, скажем так, не то. Например:

/*
@startuml
title The architecture of the site

skinparam componentStyle uml2
skinparam component {
  BorderColor<<P>> #FF6655
}

component "Template Engine" as TEN <<P>>
component "Builder" as Builder <<P>>
component "Router" as Router <<P>>
component "Web Server" as Server
component "Data Base,\nCache" as DB

interface "HTTP(S)" as HTTP

Server -r- HTTP

HTTP .r.> Router: Proxy

package "Project" {
    component "Static" as Stat
    component "Templates" as TMPL
    component "Applications" as Apps

    interface "Data\naccess" as API

    TMPL .r.> API
    TMPL .d.> Builder: Configure

    Apps -l- API
    Apps .r.> DB
}

Router -r-> TEN
TEN -d-> TMPL: Rendering
Builder --> Stat: Build
HTTP .d.> Stat: Proxy
TMPL -u-> HTTP

note right of Builder: It works once at initialization

@enduml
*/


Результат:


Здесь практически для каждой связи используются указания направления (.d. - down, -r- - right и т.д.). Вот, что будет без них:

/*
@startuml
title The architecture of the site

skinparam componentStyle uml2
skinparam component {
  BorderColor<<P>> #FF6655
}

component "Template Engine" as TEN <<P>>
component "Builder" as Builder <<P>>
component "Router" as Router <<P>>
component "Web Server" as Server
component "Data Base,\nCache" as DB

interface "HTTP(S)" as HTTP

Server -- HTTP

HTTP ..> Router: Proxy

package "Project" {
    component "Static" as Stat
    component "Templates" as TMPL
    component "Applications" as Apps

    interface "Data\naccess" as API

    TMPL ..> API
    TMPL ..> Builder: Configure

    Apps -- API
    Apps ..> DB
}

Router --> TEN
TEN --> TMPL: Rendering
Builder --> Stat: Build
HTTP ..> Stat: Proxy
TMPL --> HTTP

note right of Builder: It works once at initialization

@enduml
*/


Результат:


Читабельность явно пострадала.

Ну и ещё один момент. PlantUML может генерировать схемы разного типа. Парсер же кода - одного.

Но всё вышесказанное никак не должно восприниматься как попытка отговорить от этой затеи. Я лишь хочу показать подводные камни, которые могут возникнуть. Их скорей всего будет больше, я лишь привел те, что первыми пришли в голову.
В любом случае мысль интересная, я бы понаблюдал как минимум.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием