Bài 2 · Cơ bản · 18 phút
Mô hình vs sơ đồ: 4 khái niệm
Biên soạn bởi Nguyễn Anh Tuấn
Bốn khái niệm nền của C4: Person, Software System, Container, Component (và Code); phân biệt MÔ HÌNH (model) với SƠ ĐỒ (diagram) - một mô hình, nhiều view.
Ở bài trước, ta thấy C4 là "bản đồ nhiều mức zoom". Trước khi vẽ bản đồ, cần phân biệt hai thứ rất hay bị lẫn: mô hình (model) và sơ đồ (diagram).
- ▸Mô hình (model): tập hợp các phần tử (người, hệ thống, container...) và quan hệ giữa chúng - nguồn sự thật duy nhất.
- ▸Sơ đồ (diagram): một bức tranh vẽ ra một phần của mô hình, ở một mức zoom, cho một khán giả.
- ▸Một mô hình → nhiều sơ đồ: giống một toà nhà thật chụp được nhiều tấm ảnh từ nhiều góc.
Hiểu lầm "sơ đồ chính là mô hình" là gốc của cảnh mỗi người vẽ một kiểu. Khi đã có một mô hình rõ ràng trong đầu, các sơ đồ chỉ là cách trình bày nó - và chúng sẽ tự nhất quán với nhau.
Ví dụ, đây là một SƠ ĐỒ - một bức vẽ ra từ mô hình, ở mức xa nhất (Context):
[Người dùng]
Học viên
Mèo con học bài, làm quiz, xem tiến độ.
[Người dùng]
Giảng viên
Soạn bài giảng, chấm bài.
[Hệ thống phần mềm]
Lớp Học Trực Tuyến
Cho học viên học và giảng viên dạy.
[Hệ thống ngoài]
Cổng thanh toán
Thu học phí.
[Hệ thống ngoài]
Dịch vụ Email
Gửi email thông báo.
Để dựng mô hình, C4 chỉ cần năm loại phần tử. Chúng xếp lồng nhau từ ngoài vào trong, như những con búp bê Nga:
| Person | Con người dùng hệ thống (một vai trò/persona). Vd: học viên, tài xế. |
| Software System | Cả một hệ thống mang lại giá trị. Có thể là hệ thống của bạn, hoặc hệ thống ngoài. |
| Container | Một đơn vị chạy/triển khai được bên trong hệ thống: web app, API, cơ sở dữ liệu... |
| Component | Một nhóm chức năng bên trong một container, sau một interface. Không chạy riêng được. |
| Code element | Lớp/class, hàm cụ thể bên trong một component. Mức trong cùng. |
Quan hệ "lồng nhau" rất quan trọng: một Person dùng một Software System; hệ thống gồm các Container; mỗi container gồm các Component; mỗi component gồm Code element.
Hai khái niệm ngoài cùng là thứ ai cũng hình dung được, kể cả người không rành kỹ thuật:
- ▸Person là một VAI TRÒ, không phải một người cụ thể: "Học viên", "Giảng viên" - không phải "bạn Miu".
- ▸Software System của bạn là cái bạn đang xây; nó là tâm điểm của sơ đồ Context.
- ▸Software System ngoài (external) là dịch vụ bạn nối tới nhưng không sở hữu: cổng thanh toán, dịch vụ email, bản đồ.
- ▸Ở mức này KHÔNG nói về công nghệ - chưa cần biết viết bằng gì, lưu ở đâu.
Trung thực
Ba khái niệm bên trong là phần kỹ thuật, dành cho người sẽ xây và vận hành hệ thống:
- ▸Container = đơn vị CHẠY/TRIỂN KHAI được: một app, một API, một cơ sở dữ liệu, một file system. Đây là chỗ công nghệ bắt đầu xuất hiện.
- ▸Component = một nhóm chức năng bên trong một container (vd Order Controller, Dispatch Service). Nó không tự chạy riêng.
- ▸Code element = lớp/class, hàm - mức trong cùng, thường được bỏ qua hoặc để IDE tự sinh khi cần.
Bẫy quen thuộc: container ≠ Docker
Cách nhanh nhất để "ngấm" năm khái niệm là tự phân loại. Đọc từng "thứ" và chọn xem nó là Person, Software System, Container, Component hay Code element - đoán sai cũng tốt, đó là cách học nhanh:
🧩 Đây là khái niệm C4 nào?
1/9Một học viên đang dùng app để học bài
- ▸Mẹo: cứ hỏi "thứ này có CHẠY/TRIỂN KHAI riêng được không?" - có thì là container.
- ▸Người (vai trò) luôn là Person; cả một sản phẩm là Software System.
- ▸Một class trong code là Code element - đừng nhầm với Component (nhóm nhiều class).
Giờ ráp lại: khi đã có mô hình (các phần tử + quan hệ), mỗi mức zoom chỉ là một sơ đồ vẽ ra từ cùng mô hình ấy. Widget dưới đây minh hoạ - cùng một hệ thống, ba sơ đồ ở ba mức:
Nền tảng học online: học viên xem bài, làm quiz, theo dõi tiến độ.
Mức 1 - System Context
System Context - Lớp Học Trực Tuyến
Quan hệ (có nhãn & hướng)
- Học viên → Lớp Học Trực Tuyến : Học & làm bài [HTTPS]
- Giảng viên → Lớp Học Trực Tuyến : Soạn bài & chấm [HTTPS]
- Lớp Học Trực Tuyến → Cổng thanh toán : Thu học phí [API]
- Lớp Học Trực Tuyến → Dịch vụ Email : Gửi email [SMTP]
Để ý: bạn không dựng ba mô hình khác nhau, mà dựng một mô hình rồi nhìn nó ở ba độ zoom. Đây chính là cách giúp các sơ đồ luôn khớp nhau.
Bước tiếp theo
Câu hỏi thường gặp
Mô hình là TẬP phần tử (người, hệ thống, container...) và quan hệ giữa chúng - một nguồn sự thật duy nhất. Sơ đồ là một BỨC TRANH vẽ ra một phần của mô hình ở một mức zoom. Một mô hình có thể sinh ra nhiều sơ đồ khác nhau, giống một toà nhà thật chụp được nhiều tấm ảnh từ nhiều góc.
C4 = bốn loại SƠ ĐỒ: Context, Containers, Components, Code. Còn số khái niệm PHẦN TỬ để dựng mô hình thì có năm: Person, Software System, Container, Component, Code element (Person không có sơ đồ riêng, nó xuất hiện quanh rìa các sơ đồ). Đừng để con số làm rối: cứ nhớ "phần tử để dựng" và "sơ đồ để nhìn" là hai chuyện.
Không. Trong C4, container nghĩa là một đơn vị chạy/triển khai được: một web app, một API, một cơ sở dữ liệu, một file system... Khái niệm này có trước Docker. Bài Level 2 sẽ làm rõ; tạm thời nhớ hai chữ "container" này khác nghĩa nhau.
Đón đọc: Level 2 - Container →Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Khác biệt cốt lõi giữa "mô hình" (model) và "sơ đồ" (diagram) trong C4 là gì?
- 1
Mô hình hay sơ đồ?
Cho các thứ sau, phân loại đâu là "mô hình", đâu là "sơ đồ": (a) một file ảnh PNG trong slide, (b) một danh sách phần tử + quan hệ viết trong file text, (c) một bức vẽ trên bảng trắng.
Hoàn thành khi: Phân loại đủ 3 thứ; giải thích ngắn vì sao (b) gần với "mô hình" còn (a), (c) là "sơ đồ".
- 2
Phân loại 5 khái niệm
Làm hết các thứ trong widget "Đây là khái niệm C4 nào?" ở Bước 5; ghi lại thứ 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 thứ mèo con từng nhầm.
- 3
Liệt kê phần tử của một hệ thống
Chọn một app mèo con đang dùng. Liệt kê: những Person nào dùng nó, những Software System ngoài nào nó nối tới, và đoán những Container nào nó có.
Hoàn thành khi: Có ≥2 Person, ≥1 hệ thống ngoài, ≥3 container; mỗi mục một dòng ngắn.
- 4
"Container" của mèo con
Viết hai câu: một câu giải thích vì sao một cơ sở dữ liệu cũng là Container trong C4, và một câu nói nó khác Docker container ở đâu.
Hoàn thành khi: Hai câu rõ ý; nêu được "đơn vị chạy/triển khai được" và phân biệt với Docker.
- 5
Một mô hình → mấy sơ đồ
Với hệ thống ở bài tập 3, kể ra mèo con sẽ vẽ những sơ đồ (mức zoom) nào, và mỗi sơ đồ dành cho ai.
Hoàn thành khi: Liệt kê ≥2 sơ đồ; mỗi sơ đồ ghi rõ mức và khán giả.
- 6
Vẽ "cây" khái niệm
Vẽ một sơ đồ cây thể hiện thứ tự lồng nhau: Person dùng Software System → Container → Component → Code element, với một ví dụ tự chọn.
Hoàn thành khi: Cây có đủ 5 tầng; mỗi tầng có ít nhất một ví dụ cụ thể của mèo con.