thời gian đọc: 12 minutes

Codebase của bạn đang ngày càng lớn hơn. Các phụ thuộc giữa các module ngày một nhiều hơn. Tài liệu kiến trúc trở nên lỗi thời ngay cả trước khi kịp viết xong. Sẽ ra sao nếu build Gradle của bạn có thể tự động tạo ra các sơ đồ cập nhật từ cấu trúc thực tế của mã nguồn? Đó chính xác là những gì pipeline Graphify + PlantUML Gradle Plugin thực hiện:`graphify . --no-viz`trích xuất Knowledge Graph,`./gradlew generateKnowledgeGraphDiagram`chuyển đổi nó thành các sơ đồ PlantUML. Không LLM, không thủ công, 100% xác định.

Vấn đề là: các sơ đồ luôn chậm hơn so với mã code

Bất kỳ dự án nào vượt quá vài nghìn dòng đều gặp phải hội chứng này:

  1. Chúng ta vẽ một sơ đồ kiến trúc vào lúc bắt đầu dự án

  2. Mã nguồn phát triển, các phụ thuộc thay đổi

  3. Biểu đồ trở thành một lời nói dối mang tính trang trí

  4. Không ai cập nhật nó vì việc đó rất phiền phức

  5. Những người mới đến dựa vào đó và mắc sai lầm

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

start

:Biểu đồ kiến trúc đã được tạo\n(thủ công, bằng tay);

:Mã phát triển\n(lớp mới, phụ thuộc mới);

:Biểu đồ lỗi thời\n(không còn phản ánh mã);

if (Qui met à jour ?) then (Personne)
    :Tài liệu không chính xác;
    note right: Những nhà phát triển mới\n dựa vào điều này... và họ mắc lỗi.
else (Quelqu'un)
    :Cập nhật thủ công\n(2-3 giờ làm việc);
    note right: Đã lỗi thời\ntrước PR tiếp theo
endif

stop

@enduml

Câu hỏi không phải là có cần biểu đồ hay không? — ai cũng biết là có. Câu hỏi là:ai cập duy trì cập nhật chúng?

Câu trả lời là: không một ai. Trừ khi đó là tự động.

Giải pháp: một pipeline tất định Knowledge Graph → PlantUML

Nguyên tắc rất đơn giản: thay vì vẽ các biểu đồ bằng tay, chúng tađược tạo ra từ cấu trúc thực tế của mã nguồnVui lòng cung cấp nội dung cần dịch.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component "Graphify\n(pip install graphifyy)" as Graphify
collections "graphify-out/graph.json\n(Đồ thị kiến thức)" as KGJSON
component "PlantUML Gradle Plugin\n(generateKnowledgeGraphDiagram)" as Plugin
component "KnowledgeGraphParser" as Parser
component "KnowledgeGraphRenderer" as Renderer
component "PlantumlService\n(xác thực + hiển thị PNG)" as PS
collections "diagrams/knowledge-graph/\n(.puml + .png)" as Output

Développeur --> Graphify : graphify . --no-viz
Graphify --> KGJSON : trích xuất cấu trúc\ncủa mã nguồn
Développeur --> Plugin : ./gradlew generateKnowledgeGraphDiagram
Plugin --> Parser : parse(graph.json)
Parser --> Plugin : KnowledgeGraph\n(đỉnh + cạnh + cộng đồng)
Plugin --> Renderer : render(graph, filters)
Renderer --> Plugin : mã PlantUML\nxác định
Plugin --> PS : validateSyntax + generateImage
PS --> Output : .puml + .png

note bottom of Plugin
Pipeline DÉTERMINISTE
Không có cuộc gọi LLM
Kết quả có thể tái tạo
end note

@enduml

Hai lệnh. Chỉ vậy thôi.

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

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

Kết quả là gì? Những tệp`.puml` et .png`trong`diagrams/knowledge-graph/, được quản lý phiên bản trong Git, luôn cập nhật cùng với mã nguồn.

Bước 1: Cài đặt Graphify và trích xuất Knowledge Graph

Cài đặt

Graphify là một công cụ Python giúp phân tích codebase của bạn và xây dựng một đồ thị kiến thức có cấu trúc:

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

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

Cấu hình các loại trừ

Tạo một tệp`.graphifyignore`tại gốc của dự án để loại bỏ các tệp không thuộc logic nghiệp vụ:

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

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

# Tests fonctionnels
src/functionalTest/

Trích xuất Knowledge Graph

graphify . --no-viz

Cờ (flag)`--no-viz`bỏ qua việc tạo HTML (không cần thiết trong một pipeline Gradle). Kết quả là một tệp`graphify-out/graph.json`chứa:

  • Nút: các lớp, hàm, tệp — cùng với loại và cộng đồng của chúng

  • Cạnh: quan hệ giữa các nút (EXTRACTED từ mã, INFERRED bởi LLM)

  • Cộng đồng: nhóm tự động các nút liên kết

Ví dụ về cấu trúc`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}
  ]
}

Mã nguồn (.kt, .java) được phân tích cục bộ bởi tree-sitter,không thể kháng cáo LLM. Chỉ những tệp tài liệu (.adoc, .md) yêu cầu một lệnh gọi LLM để trích xuất ngữ nghĩa. Vì vậy`--update`trên mã Kotlin là gần như tức thời.

Bước 2: Plugin Gradle chuyển đổi Knowledge Graph thành PlantUML

Kiến trúc pipeline

Plugin`com.cheroliv.plantuml`tích hợp một tác vụ`generateKnowledgeGraphDiagram`mà chuyển đổi`graph.json`thành các biểu đồ PlantUML một cáchhoàn toàn xác địnhVui lòng cung cấp nội dung cần dịch.

@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 : thực thi
Task -> JSON : đọc
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(đỉnh + cạnh + cộng đồng)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(xác định)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
    Task -> PS : generateImage → .png
else syntaxe invalide
    Task -> Task : Lưu .puml với cảnh báo
end

@enduml

Các thành phần bên trong

Thành phần Vai trò

KnowledgeGraphParser

Phân tích`graph.json`— hỗ trợ 3 định dạng: graphify gốc (nodes+links), legacy (communities), flat. Giải quyết các ID số thành nhãn.

KnowledgeGraphRenderer

Chuyển đổi một cách xác định một`KnowledgeGraph`sang mã PlantUML. Nhóm theo loại, cộng đồng trong các package, chú giải tự động.

GenerateKnowledgeGraphDiagramTask

Tác vụ Gradle điều phối: parse → render → validate → PNG. Có thể cấu hình thông qua các thuộc tính Gradle.

kgmodels.kt

Mô hình dữ liệu:`KnowledgeGraph`, KnowledgeGraphNode, KnowledgeGraphEdge, KnowledgeGraphCommunity, `EdgeType`Vui lòng cung cấp văn bản cần dịch.

PlantumlService

Kiểm tra cú pháp + kết xuất PNG (được tái sử dụng bởi tất cả các tác vụ của plugin).

Quy tắc hiển thị

Trình kết xuất áp dụng các quy ước hình ảnh xác định:

Loại cạnh Ký hiệu PlantUML Ý nghĩa

ĐÃ TRÍCH XUẤT

-→(đường kẻ liền, màu đen)

Quan hệ được trích xuất từ mã nguồn (độ tin cậy)

ĐƯỢC SUY LUẬN

..>(đường đứt nét)

Quan hệ được LLM suy luận (điểm tin cậy)

MƠ HỒ

--x(đường kẻ đứt màu đỏ)

Quan hệ mơ hồ (cần kiểm tra)

Các cộng đồng được trả về dưới dạng các package PlantUML với bảng màu tự động.

Bước 3: Sử dụng hằng ngày

Biểu đồ đầy đủ

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

Đầu ra:`diagrams/knowledge-graph/knowledge-graph-full.puml`+.png

Lọc theo cộng đồng

# 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

Lọc theo loại cạnh

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

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

Lọc theo loại nút và độ tin cậy

# 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

Thư mục đầu ra tùy chỉnh

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

Tham chiếu đầy đủ các thuộc tính

Thuộc tính Lỗi Mô tả

plantuml.kg.community

(tất cả)

Lọc các cộng đồng theo tên (khớp chuỗi con)

plantuml.kg.edgeTypes

(tất cả)

Các loại cạnh cách nhau bằng dấu phẩy:`EXTRACTED`, INFERRED, AMBIGUOUS

plantuml.kg.minConfidence

0.0

Ngưỡng tin cậy tối thiểu cho các cạnh

plantuml.kg.maxNodes

(không giới hạn)

Số lượng nút tối đa được hiển thị

plantuml.kg.nodeTypes

(tất cả)

Các loại nút phân tách bằng dấu phẩy (vd.class, code)

plantuml.kg.outputDir

diagrams/knowledge-graph

Thư mục đầu ra cho các tệp`.puml` et .png

Pipeline hoàn chỉnh trong một workflow Gradle

Loại quy trình làm việc

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

start

partition "EXTRACTION" {
    :graphify . --no-viz;
    note right: Phân tích mã nguồn\ntree-sitter (cục bộ, không có LLM)

    :graphify-out/graph.json;
    note right: Nút + cạnh\n+ cộng đồng
}

partition "GÉNÉRATION" {
    :./gradlew generateKnowledgeGraphDiagram;
    note right: pipeline xác định\nparse → render → validate → PNG

    if (Filtres actifs ?) then (Oui)
        :Áp dụng bộ lọc\n(community, edgeTypes,\nmaxNodes, nodeTypes);
    else (Non)
        :Biểu đồ đầy đủ;
    endif

    :biểu đồ/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}

partition "INTÉGRATION" {
    :git add diagrams/knowledge-graph/;
    :git commit;
    note right: Biểu đồ phiên bản\nluôn cập nhật với mã nguồn
}

stop

@enduml

Tích hợp vào chu kỳ phát triển

Pipeline tích hợp một cách tự nhiên vào các giai đoạn phát triển then chốt:

@startuml
skinparam backgroundColor #FEFEFE

state "Phát triển" as dev
state "Trích xuất\ngraphify . --no-viz" as extract
state "Sinh\n./gradlew generateKnowledgeGraphDiagram" as generate
state "Commit\nbiểu đồ phiên bản" as commit

[*] --> dev
dev --> extract : Mã đã được sửa
extract --> generate : graph.json à jour
generate --> commit : .puml + .png đã được tạo
commit --> dev : Biểu đồ trong repo

note right of extract
Gần như ngay lập tức trên mã Kotlin (tree-sitter, không có LLM)
end note

note right of generate
Xác định
Không có LLM
Kết quả có thể tái tạo
end note

@enduml

Cập nhật gia tăng

Khi mã nguồn thay đổi, chúng ta không xây dựng lại toàn bộ đồ thị từ đầu:

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

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

--update`trích xuất lại chỉ những tệp đã bị thay đổi (được phát hiện bằng SHA256 trong`graphify-out/cache/). Đối với mã Kotlin, việc này gần như tức thời vì tree-sitter hoạt động cục bộ mà không cần gọi LLM.

Dogfooding: plugin tự lập tài liệu cho chính nó

Plugin PlantUML tồn tại để chuyển đổi các prompt thành sơ đồ. Nó cũng có thể chuyển đổi Knowledge Graph từ chính codebase propre của mình thành các sơ đồ tài liệu. Đây chính là dogfooding: plugin này sử dụng chính dịch vụ của nó.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "Pipeline thông thường\n(người dùng → biểu đồ)" 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 "Pipeline Knowledge Graph\n(định mệnh, không có 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 "Pipeline Dogfooding\n(LLM → tài liệu plugin)" 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 "Cùng LlmService, cùng ApiKeyPool,\ncùng PlantumlService\n— KHÔNG trùng lặp" as N

@enduml

Các tác vụ Gradle liên quan:

Nhiệm vụ LLM ? Mô tả

generateKnowledgeGraphDiagram

Không

Chuyển đổi`graph.json`bằng PlantUML (định mệnh)

generateDiagramDocs

Có

Tạo các`.prompt`từ đồ thị, xử lý chúng thông qua LLM (dogfooding)

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

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

Tại sao nó mang tính xác định (và tại sao điều đó lại quan trọng)

Điểm mấu chốt của pipeline`generateKnowledgeGraphDiagram`Vui lòng cung cấp văn bản cần dịch.nó không gọi bất kỳ LLM nào. Sự biến đổi`graph.json`→ PlantUML là một hàm thuần túy.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "Pipeline ĐỊNH DANH\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
Cùng đầu vào → cùng đầu ra
Không có độ trễ mạng
Không tốn chi phí token
Có thể tái lập trong CI
end note

note bottom of llm
Cùng một đầu vào → đầu ra thay đổi
Độ trễ mạng (1-5s)
Chi phí token
Yêu cầu khóa API
end note

@enduml

Những lợi ích cụ thể:

Lợi thế Tác động

Khả năng tái lập

Thậm chí`graph.json`→ cùng một biểu đồ. Chính xác. Mọi lúc.

Chi phí bằng không

Không gọi LLM = không tốn token = không hóa đơn API.

Độ trễ bằng không

Parse + render mất ~100ms, chứ không phải 1-5 giây.

CI tương thích

Không cần khóa API. Không có kiểm thử không ổn định (flaky test) do phản hồi LLM thay đổi.

Có thể đánh phiên bản

Le .puml`được tạo ra là văn bản. Chúng ta có thể`diff, người review PR, quản lý phiên bản trong Git.

Sơ đồ của chính pipeline

Để hoàn tất quy trình, dưới đây là sơ đồ pipeline như cách nó sẽ được tạo bởi plugin:

@startuml
skinparam backgroundColor #FEFEFE

participant "Nhà phát triển" 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 : thực thi
Task -> JSON : đọc
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph

alt filtres actifs
    Task -> Task : áp dụng bộ lọc\n(cộng đồng, edgeTypes, maxNodes…)
end

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

Task -> PS : validateSyntax()
alt valide
    Task -> PS : generateImage()
    PS --> Out : .puml + .png
else invalide
    Task -> Out : .puml (cảnh báo)
end

@enduml

Tích hợp vào quản trị dự án

Trong dự án của chúng tôi, pipeline này được tích hợp vào một chiến lược quản lý ngữ cảnh EAGER/LAZY cho tác nhân AI. Knowledge Graph thay thế tài liệu kiến trúc thủ công bằng một đồ thị có cấu trúc, có thể truy vấn và tự động cập nhật.

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "EAGER\n(luôn được nạp)" 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 — Chiến lược\n(theo yêu cầu)" as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package "LAZY — Graphify\n(câu truy vấn mục tiêu)" as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package "Pipeline PlantUML\n(tự động sinh)" as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --> eager : Đọc ở đầu phiên
Agent ..> lazy_strat : Tải nếu loại được phát hiện
Agent ..> lazy_graph : Truy vấn nếu cần cấu trúc
kgTask --> diagrams : Định đoán
ddTask --> diagrams : Qua LLM

note right of gr
Bản tóm tắt Knowledge Graph
God nodes + cộng đồng
Thay thế ECOSYSTEM_OVERVIEW
(225 dòng → 50 dòng)
end note

@enduml

Sự kết hợp của hai hệ thống này mang tính bổ trợ cho nhau:

  • Chiến lược quản lý KHI NÀO và NHƯ THẾ NÀO— quản trị, quy trình làm việc, lưu trữ

  • Graphify quản lý CÁI GÌ và Ở ĐÂU— cấu trúc mã, các mối quan hệ, các truy vấn mục tiêu

Vui lòng cung cấp văn bản tiếng Pháp cần dịch. Chiến lược phiên quản lý việcKHI NÀO et le BÌNH LUẬN(quản trị, quy trình làm việc, ngưỡng), Graphify quản lýCÁI GÌ et le ĐÂU(cấu trúc mã, các mối quan hệ, các truy vấn mục tiêu). Pipeline PlantUML quản lý việcVỚI CÁI GÌ(các biểu đồ xác định, được đánh phiên bản, luôn được cập nhật). Vui lòng cung cấp văn bản cần dịch.

Chuẩn bị: checklist trong 5 phút

# Bước Lệnh

1

Cài đặt Graphify

uv tool install graphifyy

2

Cấu hình các loại trừ

Tạo`.graphifyignore`

3

Trích xuất Knowledge Graph

graphify . --no-viz

4

Tạo các biểu đồ

./gradlew generateKnowledgeGraphDiagram

5

Commit các kết quả

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/

Các bẫy và biện pháp giảm thiểu

Bẫy Mô tả Giảm thiểu

Đồ thị quá dày đặc

Một dự án lớn tạo ra hàng trăm nút không thể đọc được

Sử dụng`-Pplantuml.kg.maxNodes=30`và lọc theo cộng đồng

Các loại trừ quá rộng

Quá nhiều tệp trong`.graphifyignore`giảm giá trị của đồ thị

Bắt đầu bằng việc chỉ loại trừ credentials và build

Hướng mũi tên

Các cạnh INFERRED có thể có hướng mơ hồ

Lọc theo`-Pplantuml.kg.edgeTypes=EXTRACTED`chỉ dành cho các mối quan hệ chắc chắn

Ký tự lỗi thời

Mã thay đổi nhưng đồ thị không được xây dựng lại

Sử dụng`graphify . --update`thường xuyên hoặc hook git`graphify hook install

Chi phí đã cập nhật

Các bản cập nhật gia tăng gần như miễn phí (tree-sitter local)

Chỉ các tài liệu (.adoc) tiêu tốn các token LLM

Kết quả cuối cùng chúng ta nhận được

@startuml
skinparam backgroundColor #FEFEFE

rectangle "TRƯỚC" as avant {
    card "Sơ đồ vẽ tay\nLuôn bị lỗi thời\nKhông ai cập nhật" as av1 #FDEDEC
}

rectangle "SAU" as apres {
    card "Sơ đồ được tạo tự động\nLuôn cập nhật theo mã nguồn\nĐược quản lý phiên bản trong Git\nĐịnh tính và có thể tái lập" as ap1 #E8F8E8
}

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

@enduml

Những lợi ích cụ thể:

Lợi nhuận Chi tiết

Tài liệu luôn được cập nhật

Các biểu đồ phản ánh mã nguồn hiện tại, không phải là một bản snapshot thủ công

Không tốn công bảo trì

Các sơ đồ được tạo lại sau mỗi lần build

Giảm nợ kỹ thuật

Không còn cần phải duy trì các sơ đồ bằng tay

Ngữ cảnh trực quan cho người mới

Một lập trình viên mới hiểu được kiến trúc bằng cách xem các sơ đồ

Khả năng tinh chỉnh (fine-tuning) tiềm năng

Các cặp (sub-graph → diagram) là các ví dụ huấn luyện AI

Xác thực tự động

`PlantumlService.validateSyntax()`kiểm tra từng sơ đồ được tạo ra

Nhập cuộc nhanh chóng

5 biểu đồ = cái nhìn toàn diện về kiến trúc

Vui lòng cung cấp văn bản tiếng Pháp cần dịch. Người nào có một lý do để tồn tại (pourquoi) thì có thể chịu đựng được mọi cách thức (comment). Vui lòng cung cấp văn bản tiếng Pháp cần dịch.

Lý do: các sơ đồ luôn được cập nhật. Cách thực hiện: hai câu lệnh trong một pipeline Gradle.

Liên kết

Bài viết liên quan