← C4 Model: vẽ kiến trúc phần mềm

Bài 7 · Vận dụng · 20 phút

Ký pháp & sơ đồ tự đứng vững

Biên soạn bởi Nguyễn Anh Tuấn

Ký pháp (notation) đề xuất của C4: mỗi hộp ghi tên/loại/công nghệ/mô tả; quan hệ có nhãn & hướng rõ; tiêu đề + chú giải (legend) để sơ đồ tự đứng vững.

Ta đã có đủ các loại sơ đồ. Nhưng một sơ đồ chỉ hữu ích khi người khác đọc được nó mà không cần bạn giải thích. Mục tiêu của bài này: làm sơ đồ tự đứng vững (self-standing).

Nhớ lại ba căn bệnh ở bài đầu (mũi tên mơ hồ, thiếu chú giải, trộn mức). Ký pháp tốt chính là liều thuốc chữa cả ba.

C4 không bắt bạn vẽ hình gì, nhưng gợi ý mỗi phần tử nên mang đủ thông tin:

Mỗi hộpTên + loại (person/system/container/component) + công nghệ (nếu có) + một dòng mô tả.
Mỗi quan hệNhãn rõ mục đích + hướng mũi tên + (ở mức Container) giao thức.
  • Hộp "trần" chỉ có tên là chưa đủ - thêm loại, công nghệ, mô tả để tự nói.
  • Mũi tên hai chiều mơ hồ; ưu tiên một chiều, ghi rõ ai khởi xướng.
  • Nhất quán: cùng loại phần tử thì cùng kiểu hình/màu trong cả bộ sơ đồ.

Đây là một sơ đồ theo đúng ký pháp đó - mỗi hộp có tên, loại, công nghệ và mô tả; mỗi mũi tên có nhãn rõ hướng và giao thức:

Container - bên trong Ngân Hàng Số

[Người dùng]

Khách hàng

Giao dịch trực tuyến.

[Container: React]

Web App

Ngân hàng trên trình duyệt.

[Container: Swift / Kotlin]

Mobile App

App ngân hàng trên điện thoại.

[Container: Java / Spring]

API Application

Cung cấp API cho web & mobile.

[Container: Oracle]

Cơ sở dữ liệu

Lưu đăng nhập, nhật ký giao dịch.

[Container: RabbitMQ]

Hàng đợi tin

Xử lý giao dịch bất đồng bộ.

[Hệ thống ngoài]

Hệ thống lõi (Core Banking)

Tài khoản & giao dịch.

Dùng [HTTPS]Dùng [HTTPS]Gọi [JSON/HTTPS]Gọi [JSON/HTTPS]Đọc/ghi [SQL/TCP]Đẩy giao dịch [AMQP]Lấy số dư [XML/HTTPS]
  • Tiêu đề: loại sơ đồ + tên hệ thống/phạm vi (vd "System Context - Mèo Đói").
  • Chú giải (legend): nói rõ mỗi hình dạng/màu nghĩa là gì.
  • Nhãn quan hệ: mọi mũi tên có nhãn rõ hướng và mục đích.
  • Công nghệ: ghi cho container/component (không ghi ở Context).
  • Một mức một sơ đồ: không trộn cả hệ thống với một class trên cùng bức.

Thước thử

Một câu hỏi kiểm nhanh: "Nếu gửi sơ đồ này cho một đồng nghiệp chưa biết dự án, họ hiểu được không?". Nếu chưa, nó còn thiếu thứ gì đó trong danh sách trên.

Một câu đáng nhớ của C4: ký pháp (notation) không phải là mô hình (model). Mô hình là nội dung - các phần tử và quan hệ. Ký pháp chỉ là cách bạn vẽ chúng ra giấy.

  • Cùng một mô hình vẽ bằng UML, bằng hộp-mũi-tên, hay bằng biểu tượng riêng đều được.
  • Quan trọng là sự NHẤT QUÁN và có chú giải, không phải dùng đúng "chuẩn" nào.
  • Đừng nhầm "vẽ đẹp" với "mô hình tốt": một bức màu mè vẫn có thể nói sai về hệ thống.

Trung thực

Vì C4 không ép ký pháp, hai đội có thể vẽ cùng một hệ thống trông rất khác nhau - và đều đúng C4. Điều đó BÌNH THƯỜNG. Hãy thống nhất ký pháp trong nội bộ đội bạn, rồi giữ nó nhất quán.

Hãy luyện con mắt soi lỗi. Mỗi thẻ dưới đây mô tả một sơ đồ mắc đúng một lỗi tự-đứng-vững - chọn xem nó hỏng quy tắc nào:

📋 Sơ đồ này hỏng quy tắc tự-đứng-vững nào?

1/8

Một sơ đồ đẹp với nhiều hộp và mũi tên, nhưng nhìn vào không biết nó vẽ ở mức nào, của hệ thống gì.

  • Soi lỗi nhanh: có tiêu đề chưa? có chú giải chưa? mũi tên có nhãn chưa? container có công nghệ chưa? có trộn mức không?
  • Một sơ đồ có thể mắc nhiều lỗi cùng lúc; ở đây ta tập trung lỗi nổi nhất.
  • Mỗi lỗi đều có cách sửa cụ thể - đọc phần "Cách sửa" sau mỗi câu.

Vẽ tay thì khó giữ cả bộ sơ đồ nhất quán và khỏi lạc hậu. Có một cách bền hơn: viết mô hình bằng code rồi để máy sinh sơ đồ - tự khắc nhất quán.

Bước tiếp theo

Đó là chủ đề bài tới: Diagrams as code - Structurizr, PlantUML và Mermaid, để một mô hình sinh ra nhiều sơ đồ luôn khớp nhau.

Câu hỏi thường gặp

Không. C4 KHÔNG quy định một ký pháp cứng. Bạn được tự do chọn hình dạng, màu sắc, kể cả dùng UML hay biểu tượng riêng - miễn là nhất quán trong cả bộ sơ đồ và có chú giải để người đọc hiểu. C4 quan tâm cách bạn TƯ DUY (các mức trừu tượng) hơn là bạn vẽ hình gì.

Mô hình là các phần tử và quan hệ (nội dung). Ký pháp (notation) là cách bạn vẽ chúng ra (hình thức). Cùng một mô hình có thể vẽ bằng nhiều ký pháp khác nhau. Đừng nhầm "vẽ đẹp theo chuẩn nào đó" với "có một mô hình tốt".

Rất nên, nhất là khi bạn dùng màu hay hình dạng để phân biệt loại phần tử. Không có chú giải, mỗi người đọc tự bịa ra luật - đúng căn bệnh mà C4 muốn chữa.

Là sơ đồ mà một người lạ - không tham gia dự án, không có bạn đứng cạnh giải thích - vẫn đọc hiểu được. Đó là thước đo thực tế cho chất lượng một sơ đồ kiến trúc.

Bản nháp nhanh trên bảng thì có thể lỏng tay. Nhưng bất kỳ sơ đồ nào bạn LƯU LẠI và chia sẻ thì nên tự đứng vững - vì bạn sẽ không có mặt mỗi lần ai đó mở nó ra xem.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Câu "ký pháp không phải là mô hình" (notation is not the model) nghĩa là gì?

  1. 1

    Chấm điểm sơ đồ

    Làm hết các sơ đồ trong widget "Sơ đồ này hỏng quy tắc nào?" ở Bước 5; ghi lại sơ đồ nào mèo con đoán sai.

    Hoàn thành khi: Trả lời hết; giải thích được vì sao đáp án đúng cho 2 sơ đồ từng nhầm.

  2. 2

    Sửa một sơ đồ

    Lấy một sơ đồ (của mèo con hoặc trên mạng) còn thiếu sót. Bổ sung cho nó tự đứng vững: tiêu đề, chú giải, nhãn quan hệ.

    Hoàn thành khi: Sơ đồ sau khi sửa có đủ tiêu đề, chú giải, mọi mũi tên có nhãn.

  3. 3

    Viết chú giải

    Cho một sơ đồ dùng ba màu hộp khác nhau. Viết phần chú giải (legend) nói mỗi màu là loại phần tử gì.

    Hoàn thành khi: Chú giải gán đúng mỗi màu với một loại (person/system/container...).

  4. 4

    Nhãn quan hệ tốt

    Viết lại ba nhãn mơ hồ ("kết nối", "dùng", "liên quan") thành nhãn rõ hướng và mục đích, kèm giao thức nếu hợp.

    Hoàn thành khi: Đủ 3 nhãn mới; mỗi nhãn nêu rõ ai làm gì với ai.

  5. 5

    Ký pháp của mèo con

    Tự chọn một bộ ký hiệu (hình dạng/màu) cho Person, Software System, Container. Vẽ một sơ đồ nhỏ kèm chú giải cho bộ ký hiệu đó.

    Hoàn thành khi: Bộ ký hiệu nhất quán; có chú giải; sơ đồ đọc được nhờ chú giải.

  6. 6

    Thử "tự đứng vững"

    Đưa một sơ đồ của mèo con cho người không biết dự án. Quan sát họ hiểu tới đâu, ghi lại chỗ họ vướng.

    Hoàn thành khi: Ghi được ≥2 điểm người đọc vướng; đề xuất cách sửa cho mỗi điểm.