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

Bài 3 · Cơ bản · 18 phút

Level 1: System Context

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

Sơ đồ ngữ cảnh hệ thống (System Context): hệ thống ở trung tâm, người dùng (persona) & hệ thống ngoài bao quanh - bức tranh lớn cho khán giả non-technical.

bài trước, ta đã có mô hình với các phần tử. Giờ vẽ sơ đồ đầu tiên từ mô hình ấy: System Context - mức zoom xa nhất, mức tổng quát nhất.

Điểm đặc biệt của Context: nó dành cho tất cả mọi người, kể cả người không rành kỹ thuật. Nó trả lời ba câu đơn giản: hệ thống này làm gì, ai dùng nó, và nó nối với những dịch vụ nào.

Đây là một sơ đồ Context thật - hệ thống Ngân Hàng Số nằm giữa, người dùng ở trên, các hệ thống ngoài ở dưới; mỗi mũi tên một nhãn rõ hướng:

System Context - Ngân Hàng Số

[Người dùng]

Khách hàng

Xem số dư, chuyển khoản, tra cứu giao dịch.

[Hệ thống phần mềm]

Ngân Hàng Số

Cho khách hàng giao dịch trực tuyến.

[Hệ thống ngoài]

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

Nguồn sự thật về tài khoản & giao dịch.

[Hệ thống ngoài]

Dịch vụ Email

Gửi email thông báo giao dịch.

Quản lý tài khoản [HTTPS]Lấy số dư, ghi giao dịch [XML/HTTPS]Gửi email [SMTP]
  • Hệ thống của bạn nằm ở TRUNG TÂM, như một hộp duy nhất.
  • Người dùng (Person) và hệ thống ngoài bao quanh nó.
  • Mọi quan hệ đều có nhãn nêu rõ ai làm gì với ai.

Sức mạnh của Context đến từ những gì nó CỐ TÌNH bỏ đi. Quy tắc đơn giản:

Có trên ContextHệ thống của bạn (1 hộp); các Person (vai trò); các Software System ngoài; quan hệ có nhãn.
KHÔNG có trên ContextContainer (web/API/CSDL); component; class; tên công nghệ; chi tiết bên trong hệ thống.

Trung thực

Cám dỗ lớn nhất là "tiện tay" vẽ luôn database hay tên framework vào Context. Đừng. Mỗi thứ kỹ thuật bạn nhồi vào là một lý do khiến người kinh doanh ngừng đọc. Chi tiết đó có chỗ của nó - ở mức Container.
  • Bước 1 - Chọn phạm vi: đúng MỘT hệ thống làm tâm điểm, nói rõ cái gì trong/ngoài phạm vi.
  • Bước 2 - Liệt kê Person: các vai trò dùng hệ thống (học viên, tài xế, quản trị viên...).
  • Bước 3 - Liệt kê hệ thống ngoài: các dịch vụ hệ thống nối tới (thanh toán, email, bản đồ...).
  • Bước 4 - Nối quan hệ: mỗi mũi tên một nhãn rõ hướng và mục đích ("Đặt món", "Thu tiền").

Bốn bước này áp dụng cho mọi hệ thống, dù là app học tập, app giao đồ ăn hay ngân hàng số - tư duy giống hệt nhau.

Hãy xem Context của một app đặt đồ ăn. Trong widget dưới đây, chọn Mèo Đói và giữ nguyên ở mức Context (mức 1). Đọc nó như đang giới thiệu sản phẩm cho người mới:

🗺️ Bản đồ kiến trú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 Mức 2 Mức 3

Mức 1 - System Context

System Context - Lớp Học Trực Tuyến

Học viên
Mèo con học bài, làm quiz, xem tiến độ.
Giảng viên
Soạn bài giảng, chấm bài.
Cổng thanh toán ngoài
Thu học phí.
Dịch vụ Email ngoài
Gửi email thông báo.

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]
  • Ba vai trò bao quanh: Thực khách đặt món, Nhà hàng nhận đơn, Tài xế giao - ai cũng hiểu ngay.
  • Hai hệ thống ngoài: cổng thanh toán (thu tiền) và dịch vụ bản đồ (định tuyến) - không lộ công nghệ.
  • Không một chữ nào về database hay ngôn ngữ lập trình - đó mới đúng tinh thần Context.
  • Thử đổi sang Lớp Học Trực Tuyến: cùng một kiểu đọc, dù lĩnh vực khác hẳn.

Đây chính là lý do Context quý giá: nó là ngôn ngữ chung giữa đội kỹ thuật và các phòng ban khác. Cùng một bức, mỗi bên lấy được thứ mình cần:

  • Kinh doanh / sales: thấy ngay hệ thống phục vụ ai và mang lại giá trị gì.
  • Quản lý dự án (PM): nắm các bên liên quan (người dùng, đối tác ngoài) để lên kế hoạch.
  • Nhân sự mới / khách hàng: hiểu hệ thống trong một phút mà không cần nền kỹ thuật.
  • Đội kỹ thuật: thống nhất ranh giới hệ thống trước khi đi sâu vào chi tiết.

Mẹo trình bày

Khi mở đầu một buổi giới thiệu hệ thống cho người ngoài đội, hãy bắt đầu bằng sơ đồ Context. Nó đặt mọi người vào cùng một bức tranh trước khi bạn (có thể) zoom sâu hơn cho ai cần.
  • Nhồi công nghệ/container vào Context - làm mất tính "ai cũng đọc được".
  • Mũi tên không nhãn - người đọc lại phải đoán, đúng căn bệnh ta muốn chữa.
  • Quên hệ thống ngoài quan trọng - bức tranh thiếu, dễ bỏ sót phụ thuộc.
  • Vẽ nhiều hệ thống trung tâm - đó là System Landscape, không phải Context.

Bước tiếp theo

Đã có cái nhìn tổng thể, giờ ta mở chiếc hộp trung tâm ra xem bên trong có gì: Level 2: Container - nơi các khối chạy được và công nghệ bắt đầu xuất hiện.

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

Đúng MỘT - hệ thống bạn đang xét. Nếu muốn vẽ nhiều hệ thống ngang hàng để thấy bức tranh toàn cảnh của cả một tổ chức, đó là một sơ đồ bổ trợ tên System Landscape, không phải Context. Context luôn có một tâm điểm rõ ràng.

Không nên. Context cố tình bỏ chi tiết kỹ thuật để người ngoài kỹ thuật vẫn đọc được. Công nghệ bắt đầu xuất hiện từ mức Container.

Đón đọc: Level 2 - Container →

Thường khoảng 5 đến 15 hộp. Nếu có quá nhiều hệ thống ngoài, hãy nhóm những cái cùng vai trò lại (vd gộp ba dịch vụ thông báo thành "Dịch vụ thông báo"). Sơ đồ Context phải liếc một cái là hiểu.

Có, nếu họ là một vai trò tương tác với hệ thống. Person trong C4 là vai trò sử dụng, bất kể trong hay ngoài công ty - admin, nhân viên CSKH, học viên đều có thể là Person.

Sơ đồ kiến trúc truyền thống hay nhồi server, database, hàng đợi vào một bức. Context thì cố tình ở mức cao nhất: chỉ có hệ thống của bạn, người dùng, và hệ thống ngoài. Nhờ vậy nó là cầu nối với người không chuyên.

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

Một sơ đồ System Context nên có bao nhiêu hệ thống ở vị trí trung tâm?

  1. 1

    Đọc một Context

    Tìm (hoặc dùng widget Bước 4) một sơ đồ System Context. Chỉ ra: hệ thống trung tâm, các Person, và các hệ thống ngoài.

    Hoàn thành khi: Gọi tên đúng hệ thống trung tâm; liệt kê ≥2 Person và ≥1 hệ thống ngoài.

  2. 2

    Vẽ Context cho app đặt đồ ăn

    Chọn một app giao đồ ăn mèo con biết. Tự vẽ sơ đồ Context theo bốn bước ở Bước 3 (phạm vi → Person → hệ thống ngoài → quan hệ có nhãn).

    Hoàn thành khi: Sơ đồ có tiêu đề; một hệ thống ở giữa; ≥2 Person; ≥1 hệ thống ngoài; mọi mũi tên có nhãn rõ hướng.

  3. 3

    Trong hay ngoài - hay không xuất hiện?

    Cho danh sách: cổng thanh toán, cơ sở dữ liệu nội bộ, đội chăm sóc khách hàng, app của đối tác giao hàng. Phân loại trên sơ đồ Context: cái nào là hệ thống ngoài, cái nào là Person, cái nào KHÔNG xuất hiện ở mức Context.

    Hoàn thành khi: Phân loại đủ 4 mục; nhận ra cơ sở dữ liệu nội bộ KHÔNG xuất hiện ở Context (nó là container).

  4. 4

    Thuyết minh cho "sếp"

    Dùng một sơ đồ Context, viết 3-4 câu giải thích nó như đang nói với một người không rành kỹ thuật (vd sếp kinh doanh).

    Hoàn thành khi: Đoạn nói rõ: hệ thống làm gì, ai dùng, nối với dịch vụ ngoài nào - không dùng từ kỹ thuật khó.

  5. 5

    Săn lỗi Context

    Cho một sơ đồ Context có lỗi cố ý: một hộp ghi "PostgreSQL", một mũi tên không nhãn. Chỉ ra hai lỗi và nói cách sửa.

    Hoàn thành khi: Chỉ đúng cả hai lỗi; nêu cách sửa (bỏ container khỏi Context; thêm nhãn cho mũi tên).

  6. 6

    Đặt ranh giới

    Chọn một hệ thống. Viết một câu định nghĩa rõ: cái gì nằm TRONG phạm vi hệ thống của mèo con, cái gì là hệ thống NGOÀI.

    Hoàn thành khi: Một câu rạch ròi; có ít nhất một thứ "trong" và một thứ "ngoài".