Πίνακας περιεχομένων
χρόνος ανάγνωσης : 12 minutes

Η βάση κώδικα σας αυξάνει. Οι εξαρτήσεις μεταξύ των modules πολλαπλασιάζονται. Η τεκμηρίωση της αρχιτεκτονίας γίνεται παρωχημένη ακόμα πριν γραφτεί. Και αν το Gradle build σας μπορούσε αυτοματως να δημιουργήσει ενημερωμένα διαγράμματα από την πραγματική δομή του κώδικα; Αυτό είναι ακριβώς αυτό που κάνει το pipeline Graphify + PlantUML Gradle Plugin :`graphify . --no-viz`εξάγει το Knowledge Graph,`./gradlew generateKnowledgeGraphDiagram`το μετατρέπει σε διαγράμματα PlantUML. Μηδενικό LLM, μηδενικό εγχειρίδιο, 100% καθορισμένο.

Το πρόβλημα: τα διαγράμματα είναι πάντα πίσω από τον κώδικα

Κάθε έργο που υπερβαίνει λίγες χιλιάδες γραμμές γνωρίζει αυτό το σύνδρομο:

  1. Σχεδιάζουμε ένα διάγραμμα αρχιτεκτονικής στην αρχή του έργου

  2. Ο κώδικας εξελίσσεται, οι εξαρτήσεις αλλάζουν

  3. Το διάγραμμα γίνεται ένα διακοσμητικό ψεύδος

  4. Καμία δεν το ενημερώνει γιατί είναι κουραστικό

  5. Οι νέοι φθάνοντες βασίζονται σε αυτό και κάνουν λάθη.

@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #FDEDEC
skinparam ActivityDiamondBackgroundColor #FFF3CD

start

:Diagramme d'architecture créé\n(manuellement, à la main);

:Le code évolue\n(nouvelles classes, nouvelles dépendances);

:Diagramme obsolète\n(ne reflète plus le code);

if (Qui met à jour ?) then (Personne)
    :Documentation mensongère;
    note right: Les nouveaux développeurs\nse basent dessus... et font des erreurs
else (Quelqu'un)
    :Mise à jour manuelle\n(2-3 heures de travail);
    note right: Déjà obsolète\nà la prochaine PR
endif

stop

@enduml

Η ερώτηση δεν είναι χρειάζεται διαγράμματα; — όλοι ξέρουν ότι ναι. Η ερώτηση είναι:ποιος τα ενημερώνει;

Η απάντηση: κανένας. Εκτός αν είναι αυτόματο.

Η λύση: ένα καθορισμένο pipeline Knowledge Graph → PlantUML

Ο αρχός είναι απλός: αντί να σχεδιάζουμε τα διαγράμματα με το χέρι, ταγεννάει από τη πραγματική δομή του κώδικα.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component "Graphify\n(pip install graphifyy)" as Graphify
collections "graphify-out/graph.json\n(Knowledge Graph)" as KGJSON
component "PlantUML Gradle Plugin\n(generateKnowledgeGraphDiagram)" as Plugin
component "KnowledgeGraphParser" as Parser
component "KnowledgeGraphRenderer" as Renderer
component "PlantumlService\n(validation + rendu PNG)" as PS
collections "diagrams/knowledge-graph/\n(.puml + .png)" as Output

Développeur --> Graphify : graphify . --no-viz
Graphify --> KGJSON : extrait la structure\ndu code source
Développeur --> Plugin : ./gradlew generateKnowledgeGraphDiagram
Plugin --> Parser : parse(graph.json)
Parser --> Plugin : KnowledgeGraph\n(noeuds + arêtes + communautés)
Plugin --> Renderer : render(graph, filters)
Renderer --> Plugin : code PlantUML\ndéterministe
Plugin --> PS : validateSyntax + generateImage
PS --> Output : .puml + .png

note bottom of Plugin
  Pipeline DÉTERMINISTE
  Aucun appel LLM
  Résultat reproductible
end note

@enduml

Δύο εντολές. Αυτό είναι όλα.

# Étape 1 : extraire le Knowledge Graph
graphify . --no-viz

# Étape 2 : générer les diagrammes PlantUML
./gradlew generateKnowledgeGraphDiagram

Το αποτέλεσμα; Αρχεία`.puml` et .png`σε`diagrams/knowledge-graph/, versioned στο Git, πάντα ενημερωμένοι με τον κώδικα.

Βήμα 1 : Εγκατάσταση του Graphify και εξαγωγή του Knowledge Graph

Εγκατάσταση

Το Graphify είναι ένα εργαλείο Python που αναλύει το codebase σας και κατασκευάει έναν δομημένο γνώστicos γράφο:

# Méthode recommandée
uv tool install graphifyy && graphify install --platform opencode

# Alternative avec pip
pip install graphifyy && graphify install --platform opencode

Ρυθμίστε τις εξαιρέσεις

Δημιουργήστε ένα αρχείο`.graphifyignore`στηρίζα του έργου για να αποκλείσει τα αρχεία που δεν είναι μέρος της επιχειρηματικής λογικής :

# Secrets — JAMAIS dans le graphe
*-context.yml
*.env

# Fichiers générés
build/
.gradle/

# Tests fonctionnels
src/functionalTest/

Εξαγωγή του Knowledge Graph

graphify . --no-viz

Το σημαία`--no-viz`αγνοεί τη γενέρωση HTML (απαισιάδευτο σε μια διαδικασία Gradle). Το αποτέλεσμα είναι ένα αρχείο`graphify-out/graph.json`περιέχον :

  • Κόμβοι: κλάσεις, συναρτήσεις, αρχεία — με τον τύπο τους και την κοινότητα τους

  • άκρες: σχέσεις μεταξύ κόμβων (EXTRACTED από τον κώδικα, INFERRED από το LLM)

  • Κοινότητες: αυτοματοποιημένα ομαδοποιήσεις συνδεδεμένων κόμβων

Παράδειγμα δομής`graph.json`
{
  "nodes": [
    {"id": "0", "label": "LlmService", "file_type": "code", "community": 0},
    {"id": "1", "label": "ApiKeyPool", "file_type": "code", "community": 0},
    {"id": "2", "label": "PlantumlService", "file_type": "code", "community": 1}
  ],
  "links": [
    {"source": "1", "target": "0", "relation": "uses", "confidence": "EXTRACTED", "weight": 0.9},
    {"source": "0", "target": "2", "relation": "calls", "confidence": "INFERRED", "weight": 0.7}
  ]
}

Ο πηγαίος κώδικας (.kt, .java) αναλύεται τοπικά από το tree-sitter,χωρίς κλήση LLM. Μόνο τα αρχεία τεκμηρίωσης (.adoc, .md) απαιτούν μία κλήση LLM για τη σημασιολογική εξαγωγή. Επομένως`--update`στο κώδικα Kotlin είναι σχεδόν άμεσα.

Βήμα 2 : Το πρόσθετο Gradle μετατρέπει τον Knowledge Graph σε PlantUML

Αρχιτεκτονική του pipeline

Το plugin`com.cheroliv.plantuml`ενσωματώνει μια εργασία`generateKnowledgeGraphDiagram`ο οποίος μετατρέπει`graph.json`σε διαγράμματα PlantUML με τρόποολοκαλώς καθοριστικός(empty)

@startuml
skinparam backgroundColor #FEFEFE

participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS

collections "graphify-out/graph.json" as JSON

G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(noeuds + arêtes + communautés)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(déterministe)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
    Task -> PS : generateImage → .png
else syntaxe invalide
    Task -> Task : save .puml avec warning
end

@enduml

τα εσωτερικά εξαρτήματα

σταθερό ρόλος

KnowledgeGraphParser

Parse`graph.json`— υποστηριζει 3 μορφές : graphify ενσωματωßen (nodes+links), κληρονομιά (communities), flat. Επιλύει τα νυμερικά IDs σε ετικέτες.

KnowledgeGraphRenderer

Καθοριστικά μετασχηματίζει ένα`KnowledgeGraph`σε κώδικα PlantUML. Ομαδοποιημένα ανά τύπο, κοινότητες σε πακέτα, αυτόματη λεγένδα.

GenerateKnowledgeGraphDiagramTask

Εργασία Gradle που orchestrarei : parse → render → validate → PNG. Ρυθμίσιμη μέσω ιδιοτήτων Gradle.

kgmodels.kt

Μοντέλα δεδομένων:`KnowledgeGraph`, KnowledgeGraphNode, KnowledgeGraphEdge, KnowledgeGraphCommunity, EdgeType.

PlantumlService

Επαλήθευση σύνταξης + απόδοση PNG (επαναχρησιμοποιείται από όλες τις εργασίες του προσθέτου).

Κανόνες απόδοσης

Ο renderer εφαρμόζει deterministικές οπτικές συνθήκες :

Τύπος ακμής Σύμβολα PlantUML Σημασία

εξαγμένο

-→(γραμμή πλήρης, μαύρη)

Σχέση εξαγμένη από τον πηγαίο κώδικα (βεβαιότητα)

συμπερασμένο

..>(διακεκομμένη γραμμή)

Σχέση που προκύπτει από το LLM (βαθμός εμπιστοσύνης)

ΑΣΑΦΗΣ

--x(διακεκομμένη κόκκινη γραμμή)

Αμφίβολη σχέση (να ελεγχθεί)

Οι κοινότητες αποδίδονται ως πακέτα PlantUML με αυτόματη χρωματική παλέτα.

Βήμα 3 : Καθημερινή χρήση

Πλήρες διάγραμμα

# Générer le diagramme du Knowledge Graph complet
./gradlew generateKnowledgeGraphDiagram

Έξοδος :`diagrams/knowledge-graph/knowledge-graph-full.puml`+.png

Φιλτράρισμα ανά κοινότητα

# Une seule communauté
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0

# Limiter le nombre de noeuds (lisibilité)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0 \
  -Pplantuml.kg.maxNodes=15

Φιλτράρισμα ανά τύπο ακμής

# Uniquement les relations certaines (EXTRACTED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED

# Relations certaines + inférées
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED,INFERRED

Φιλτράρισμα ανάλογα με τον τύπο κόμβου και την εμπιστοσύνη

# Uniquement les classes de code
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.nodeTypes=code

# Seuil de confiance minimum (pour les INFERRED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.minConfidence=0.7

Προσαρμοσμένος κατάλογος εξόδου

./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.outputDir=docs/architecture

Πλήρης αναφορά των ιδιοτήτων

Ιδιοκτησία προεπιλογή Περιγραφή

plantuml.kg.community

(όλες)

Φιλτράρισμα κοινωνιών ανά όνομα (υποαλφαριθμητική ταύτιση)

plantuml.kg.edgeTypes

(όλοι)

Τύποι ακμών, διαχωρισμένοι με κόμματα:`EXTRACTED`, INFERRED, AMBIGUOUS

plantuml.kg.minConfidence

0.0

Ελάχιστο όριο εμπιστοσύνης για τις ακμές

plantuml.kg.maxNodes

(απεριόριστο)

Μέγιστος αριθμός κόμβων για εμφάνιση

plantuml.kg.nodeTypes

(όλοι)

Τύποι κόμβων διαχωρισμένοι με κόμματα (π.χ.class, code)

plantuml.kg.outputDir

diagrams/knowledge-graph

Φάκελος εξόδου για τα αρχεία`.puml` et .png

Ο πλήρες pipeline σε ένα workflow Gradle

τύπος ροής εργασίας

@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #E8F4FD
skinparam ActivityDiamondBackgroundColor #FFF3CD
skinparam ActivityBorderColor #2C3E50

start

partition "EXTRACTION" {
    :graphify . --no-viz;
    note right: Analyse le code source\ntree-sitter (local, pas de LLM)

    :graphify-out/graph.json;
    note right: Noeuds + arêtes\n+ communautés
}

partition "GÉNÉRATION" {
    :./gradlew generateKnowledgeGraphDiagram;
    note right: Pipeline déterministe\nparse → render → validate → PNG

    if (Filtres actifs ?) then (Oui)
        :Appliquer filtres\n(community, edgeTypes,\nmaxNodes, nodeTypes);
    else (Non)
        :Diagramme complet;
    endif

    :diagrams/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}

partition "INTÉGRATION" {
    :git add diagrams/knowledge-graph/;
    :git commit;
    note right: Diagrammes versionnés\ntoujours à jour avec le code
}

stop

@enduml

Ενσωμάτωση στον κύκλο ανάπτυξης

Το pipeline ενσωματώνεται φυσιολογικά στα κρίσιμα βήματα της ανάπτυξης:

@startuml
skinparam backgroundColor #FEFEFE

state "Développement" as dev
state "Extraction\ngraphify . --no-viz" as extract
state "Génération\n./gradlew generateKnowledgeGraphDiagram" as generate
state "Commit\ndiagrammes versionnés" as commit

[*] --> dev
dev --> extract : Code modifié
extract --> generate : graph.json à jour
generate --> commit : .puml + .png générés
commit --> dev : Diagrammes dans le repo

note right of extract
  Quasi instantané sur du code Kotlin
  (tree-sitter, pas de LLM)
end note

note right of generate
  Déterministe
  Pas de LLM
  Résultat reproductible
end note

@enduml

Αυξητή ενημέρωση

Όταν αλλάζει ο κώδικας, δεν ξαναχτίζουμε όλο τον γράφο από το μηδέν:

# Mise à jour incrémentale (fichiers modifiés uniquement)
graphify . --update

# Puis régénérer les diagrammes
./gradlew generateKnowledgeGraphDiagram

--update`αναξάγει μόνο τα τροποποιημένα αρχεία (προσδιορισμένα από SHA256 στο`graphify-out/cache/). στον κώδικα Kotlin, είναι σχεδόν άμεσα επειδή το tree-sitter δουλεύει τοπικά χωρίς κλήση LLM.

Το dogfooding : το plugin είναι αυτοτεκμηριωμένο

Το plugin PlantUML υπάρχει για τη μετατροπή των prompts σε διαγράμματα. Μπορεί επίσης να μετατρέψει τον Knowledge Graph της propre codebase σε διαγράμματα τεκμηρίωσης. Είναι dogfooding : το plugin καταναλώνει το δικό του υπηρεσία.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "Κανονικός αγωγός (Pipeline)\n(χρήστης → διαγράμματα)" as normal {
    [Fichier .prompt] as prompt
    [LlmService\n+ ApiKeyPool] as llm1
    [ProcessPlantumlPromptsTask] as task1
    [Diagramme PNG] as out1

    prompt --> task1
    task1 --> llm1
    llm1 --> out1
}

package "Αγωγός Γράφου Γνώσης (Knowledge Graph Pipeline)\n(ντετερμινιστικός, χωρίς LLM)" as kg {
    [graphify-out/graph.json] as kgjson
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantumlService] as ps
    [Diagramme PNG\n(documentation du plugin)] as out2

    kgjson --> parser
    parser --> renderer
    renderer --> ps
    ps --> out2
}

package "Αγωγός Dogfooding\n(LLM → τεκμηρίωση πρόσθετου)" as dogfood {
    [GraphifyPromptAdapter] as gpa
    [Fichiers .prompt\nauto-générés] as auto_prompt
    [LlmService\n+ ApiKeyPool] as llm2
    [ProcessPlantumlPromptsTask] as task2
    [Diagramme PNG\n(documentation LLM)] as out3

    kgjson --> gpa
    gpa --> auto_prompt
    auto_prompt --> task2
    task2 --> llm2
    llm2 --> out3
}

note "Ίδιο LlmService, ίδιο ApiKeyPool,\nίδιο PlantumlService\n— ΜΗΔΕΝ διπλοεγγραφή" as N

@enduml

Συσχετισμένες εργασίες Gradle :

Εργασία LLM ? Περιγραφή

generateKnowledgeGraphDiagram

Όχι

Μετατρέψε`graph.json`σε PlantUML (deterministiki)

generateDiagramDocs

Ναι

Δημιούργησε μερικά`.prompt`από την γραφή, τα διεξάγει μέσω LLM (dogfooding)

# Documentation déterministe (rapide, pas de LLM)
./gradlew generateKnowledgeGraphDiagram

# Documentation LLM (plus riche, consomme des tokens)
./gradlew generateDiagramDocs

Γιατί είναι determinist (και γιατί είναι σημαντικό)

Το βασικό σημείο του pipeline`generateKnowledgeGraphDiagram` : δεν καλεί καμία LLM. Η μετασχέτιση`graph.json`→ PlantUML είναι μια καθαρή συνάρτηση.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "Ντετερμινιστικός Pipeline\n(generateKnowledgeGraphDiagram)" as det {
    [graph.json] as json
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantUML code] as puml

    json --> parser : parse
    parser --> renderer : KnowledgeGraph
    renderer --> puml : render (fonction pure)
}

rectangle "Pipeline LLM\n(processPlantumlPrompts)" as llm {
    [.prompt] as prompt
    [LlmService] as llmSvc
    [ChatModel] as model
    [PlantUML code] as puml2

    prompt --> llmSvc
    llmSvc --> model : API call
    model --> puml2 : réponse non-déterministe
}

note bottom of det
Ίδια είσοδος → ίδια έξοδος
Χωρίς καθυστέρηση δικτύου
Χωρίς κόστος tokens
Επαναπαραγώγιμο σε CI
end note

note bottom of llm
Ίδια είσοδος → μεταβλητή έξοδος
Καθυστέρηση δικτύου (1-5s)
Κόστος σε tokens
Απαιτεί κλειδί API
end note

@enduml

Τα υπαρκτά πλεονεκτήματα :

πλεονέκτημα Έπτωση

αναπαραγωγιμότητα

Ακόμη`graph.json`→ ίδιο διάγραμμα. Ακριβώς. Κάθε φορά.

μηδενικός κόστος

Δεν υπάρχει κλήση LLM = δεν υπάρχουν tokens = δεν υπάρχει λογαριασμός API.

Μηδενική καθυστέρηση

Parse + render χρειάζεται περίπου 100ms, όχι 1-5 δευτερόλεπτα.

CI συμβατό

Δεν απαιτείται κλειδί API. Δεν υπάρχει αβέβαιος τεστ λόγω μεταβλητής απάντησης LLM.

υποδέχεται εκδοχή

Le .puml`γεννημένο είναι κείμενο. Μπορούμε το`diff, ο reviewer στην PR, το versionner στο Git.

Διαγράμματα του pipeline του εαυτό του

Για να κλείσουμε τον κύκλο, εδώ είναι το διάγραμμα του pipeline όπως θα δημιουργηθεί από το πρόσθετο :

@startuml
skinparam backgroundColor #FEFEFE

participant "Développeur" as Dev
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
collections "diagrams/knowledge-graph/" as Out

Dev -> G : ./gradlew generateKnowledgeGraphDiagram
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph

alt filtres actifs
    Task -> Task : appliquer filtres\n(community, edgeTypes, maxNodes…)
end

Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML

Task -> PS : validateSyntax()
alt valide
    Task -> PS : generateImage()
    PS --> Out : .puml + .png
else invalide
    Task -> Out : .puml (avec warning)
end

@enduml

Ενσωμάτωση στη διακυβέρνηση του έργου

Στο έργο μας, αυτή η pipeline ενσωματώνεται σε μια στρατηγική διαχείρισης περιβάλλοντος EAGER/LAZY για τον AI agent. Ο Knowledge Graph αντικαθιστά την εγχειριδιακή τεκμηρίωση αρχιτεκτονικής με ένα δομημένο, ερωτήσιμο και αυτόματα ενημερωμένο γράφος.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "EAGER\n(toujours chargé)" as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d'ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package "LAZY — Stratégie\n(sur demande)" as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package "LAZY — Graphify\n(requêtes ciblées)" as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package "Pipeline PlantUML\n(auto-généré)" as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --> eager : Lit en début de session
Agent ..> lazy_strat : Charge si type détecté
Agent ..> lazy_graph : Query si besoin structurel
kgTask --> diagrams : Déterministe
ddTask --> diagrams : Via LLM

note right of gr
  Condensé du Knowledge Graph
  God nodes + communautés
  Remplace ECOSYSTEM_OVERVIEW
  (225 lignes → 50 lignes)
end note

@enduml

Ο γάμος των δύο συστημάτων είναι κομπλεmenteρικος :

  • Η στρατηγική διαχειρίζεται το όταν και το πώς— διακυβέρνηση, ροή εργασίας, αρχειοθέτηση

  • Graphify διαχειρίζεται το ΤΙ και το ΠΟΥ— δομή κώδικα, σχέσεις, στοχευμένα ερωτήματα

(blank) Η στρατηγική συνεδρίας διαχειρίζεται τοΌΤΑΝ et le πώς(κυβέρνηση, ροή εργασίας, ορια), Graphify διαχειρίζεται τοτι et le ΠΟΥ(Δομή κώδικα, σχέσεις, στοχευμένες ερωτήσεις). Η διαδικασία PlantUML διαχειρίζεται τοΜΕ ΤΙ(διαグラμματα deterministικα, υπο ελεγχο εκδοσης, παντα ενημερωμενα) __

Εγκατάσταση: λίστα ελέγχου σε 5 λεπτά

# βήμα Παραγγελία

1

Εγκατάσταση Graphify

uv tool install graphifyy

2

Ρυθμίστε τις εξαιρέσεις

να δημιουργώ`.graphifyignore`

3

Εξαγωγή του Knowledge Graph

graphify . --no-viz

4

Δημιουργήστε τα διαγράμματα

./gradlew generateKnowledgeGraphDiagram

5

Καταχωρήστε τα αποτελέσματα

git add diagrams/knowledge-graph/

# Script complet en 5 commandes
uv tool install graphifyy
cat > .graphifyignore << 'EOF'
*-context.yml
*.env
build/
.gradle/
EOF
graphify . --no-viz
./gradlew generateKnowledgeGraphDiagram
git add graphify-out/GRAPH_REPORT.adoc graphify-out/graph.json diagrams/knowledge-graph/

Παγίδες και μείωσες

παγίδα Περιγραφή μείωση

Γράφος πολύ πυκνός

Ένας μεγάλος πρόγραμμα παράγει εκατοντάδες μη αναγνώσιμους κόμβους.

Χρησιμοποιεί`-Pplantuml.kg.maxNodes=30`και φιλτράρισμα ανά κοινότητα

Εξαιρέσεις πολύ πλατές

Πολλά αρχεία σε`.graphifyignore`μειώνει την τιμή του γραφήματος

Αρχίšte από αποκλείοντας μόνο credentials και build

Κατεύθυνση των βελών

Οι άκρες INFERRED μπορούν να έχουν ασαφή κατεύθυνση

Φιλτράρει κατά`-Pplantuml.kg.edgeTypes=EXTRACTED`για τις ορισμένες σχέσεις μόνο

Παρωχημένο γράφημα

Ο κώδικας αλλάζει αλλά το γράφημα δεν ξαναδημιουργείται

Χρησιμοποίησε`graphify . --update`τακτικά ή ο hook git`graphify hook install`

Κόστος ενημερωμένο

Οι αραξιακές ενημερώσεις είναι σχεδόν δωρεάν (tree-sitter local)

Μόνο τα docs (.adoc) καταλαβαίνουν tokens LLM

Τι παίρνετε τελικά

@startuml
skinparam backgroundColor #FEFEFE

rectangle "ΠΡΙΝ" as avant {
    card "Διαγράμματα σχεδιασμένα στο χέρι\nΠάντα ξεπερασμένα\nΚανείς δεν τα ενημερώνει" as av1 #FDEDEC
}

rectangle "ΜΕΤΑ" as apres {
    card "Διαγράμματα που δημιουργούνται αυτόματα\nΠάντα ενημερωμένα με τον κώδικα\nΜε έλεγχο εκδόσεων στο Git\nΝτετερμινιστικά και αναπαραγώγιμα" as ap1 #E8F8E8
}

avant --> apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram

@enduml

Τα συγκεκριμένα οφέλη:

Κέρδος Λεπτομέρεια

τεκμηρίωση πάντα ενημερωμένη

Τα διαγράμματα αντικατοπτρίζουν τον τρέχοντα κώδικα, όχι ένα χειροκίνητο σναπ.

Μηδενική προσπάθεια συντήρησης

Τα διαγράμματα αναγεννιούνται σε κάθε build

Μείωση του τεχνολογιού χрэους

Δεν χρειάζεται πλέον να διατηρείτε τα διάγραμμα χειροκίνητα.

Οπτικό πλαίσιο για τους νέους

Ένας νέος προγραμματιστής καταλαβαίνει την αρχιτεκτονική βλέποντα τα διαγράμματα

πιθανή επιεϊκή ρύθμιση

Τα ζεύγη (υπογράφημα → διάγραμμα) είναι παραδείγματα εκπαίδευσης ΤΕ

Αυτόματη επαλήθευση

`PlantumlService.validateSyntax()`ελέγχει κάθε παραγμένο διάγραμμα

Γρήγορο ενσωμάτωση

5 διαγράμματα = πλήρης όψη της αρχιτεκτονικής

_ Οποιος έχει ένα _γιατί μπορεί να αντέξει όλα τα πώς. __

Ο γιατί : διαγράμματα πάντα ενημερωμένα. Ο πώς : δύο εντολές σε ένα pipeline Gradle.

Σύνδεσμοι

Σχετικά άρθρα