Skip to main content

Command Palette

Search for a command to run...

Giải thích dễ hiểu về C4 Model và Cấp độ 1: System Context Diagram

Updated
13 min readView as Markdown
Giải thích dễ hiểu về C4 Model và Cấp độ 1: System Context Diagram

Giới thiệu

Khi thiết kế hoặc giải thích một hệ thống phần mềm, một vấn đề thường gặp là người ta hay đi sâu vào chi tiết kỹ thuật quá sớm. Developer có thể nói về database, API, class, hay framework, trong khi các bên liên quan về kinh doanh chỉ cần hiểu bức tranh tổng thể.

Đây là lý do các sơ đồ kiến trúc phần mềm quan trọng. Chúng giúp ta truyền đạt cách một hệ thống hoạt động theo cách trực quan và dễ hiểu.

Một phương pháp hữu ích để minh họa kiến trúc phần mềm là C4 Model. Trong bài viết này, tôi sẽ tập trung vào ý tưởng cơ bản của C4 Model và giải thích cấp độ đầu tiên: System Context Diagram.


C4 Model là gì?

C4 Model là cách mô tả cấu trúc của một hệ thống phần mềm bằng các mức độ trừu tượng khác nhau.

C4 là viết tắt của:

  1. Context (Bối cảnh)

  2. Containers (Thành phần lớn)

  3. Components (Thành phần)

  4. Code (Mã nguồn)

Ý tưởng chính của C4 Model giống như dùng bản đồ. Khi muốn hiểu về một địa điểm, ta thường bắt đầu với bản đồ tổng quan trước, sau đó zoom vào để xem chi tiết hơn.

Hình 1: Bốn cấp độ của Mô hình C4, từ Ngữ cảnh đến Mã nguồn.

Tư duy này hoàn toàn có thể áp dụng vào kiến trúc phần mềm: Chúng ta cần hiểu toàn bộ hệ thống một cách tổng thể trước khi đi sâu vào các chi tiết kỹ thuật phức tạp.


Ý tưởng "Zoom In" (Phóng to)

Mô hình C4 cho phép chúng ta dịch chuyển từ góc nhìn cấp cao (tổng quan) sang góc nhìn chi tiết hơn theo từng bước.

Ở cấp độ cao nhất, chúng ta quan sát hệ thống như một khối thống nhất. Sau đó, nếu cần thiết, chúng ta sẽ "zoom in" để hiểu rõ các phần bên trong của nó. Cách tiếp cận này tuân theo nguyên lý:

Tổng quan trước, lọc và thu hẹp phạm vi, sau đó đi vào chi tiết khi có nhu cầu.

Nói cách khác, chúng ta không nên nhồi nhét tất cả mọi thứ vào một sơ đồ duy nhất. Một sơ đồ cố gắng hiển thị mọi chi tiết cùng một lúc sẽ rất dễ rối mắt và khó hiểu. Thay vào đó, Mô hình C4 chia tách thông tin thành các cấp độ khác nhau để mỗi sơ đồ đều có một mục đích rõ ràng.


Bốn cấp độ của C4 Model

Mô hình C4 bao gồm bốn cấp độ chính:

  1. System Context (Ngữ cảnh Hệ thống): Hiển thị hệ thống phần mềm đang xây dựng, những người sử dụng nó và các hệ thống bên ngoài mà nó tương tác cùng.

  2. Containers (Sơ đồ Container): Phóng to vào hệ thống để hiển thị các khối kỹ thuật chính, chẳng hạn như ứng dụng web, ứng dụng di động, cơ sở dữ liệu hoặc API.

  3. Components (Sơ đồ Hợp phần): Phóng to vào một container cụ thể để hiển thị các thành phần cấu trúc bên trong cấu thành nên container đó.

  4. Code (Sơ đồ Mã nguồn): Hiển thị chi tiết triển khai ở mức lập trình, chẳng hạn như các class, interface hoặc cấu trúc mã nguồn.

Tuy nhiên, trong bài viết này, tôi sẽ tập trung chủ yếu vào Level 1: Sơ đồ Ngữ cảnh Hệ thống, vì đây chính là điểm khởi đầu bắt buộc để hiểu bất kỳ hệ thống phần mềm nào.

Ba cấp độ còn lại cũng rất quan trọng nhưng sẽ chỉ được giới thiệu ngắn gọn; trọng tâm vẫn là Level 1.


Level 1: Sơ đồ Ngữ cảnh Hệ thống (System Context Diagram)

System Context Diagram là gì?

System Context Diagram là cấp độ đầu tiên của C4 Model. Nó cho góc nhìn cấp cao về một hệ thống phần mềm và thể hiện cách hệ thống đó hòa nhập vào môi trường xung quanh.

Sơ đồ này thường đặt hệ thống phần mềm chính ở trung tâm. Quanh đó, ta thể hiện người dùng và các hệ thống phần mềm khác tương tác với nó.

Sơ đồ này giúp trả lời các câu hỏi như:

  • Chúng ta đang xây dựng hệ thống phần mềm gì?

  • Ai là người sử dụng hệ thống này?

  • Hệ thống tương tác với những hệ thống bên ngoài nào khác?

  • Điều gì nằm trong và nằm ngoài phạm vi (scope) quản lý của hệ thống?

Sơ đồ này cực kỳ hữu ích vì nó giúp tất cả mọi người – dù là kỹ thuật hay kinh doanh – cùng nắm được bức tranh tổng thể trước khi bước vào các cuộc thảo luận kỹ thuật sâu hơn.


Mục đích của System Context Diagram

Mục đích cốt lõi của System Context Diagram là xác định rõ ràng phạm vi (boundary) của hệ thống phần mềm. Nó giúp mọi người hiểu được hệ thống chịu trách nhiệm cho những tác vụ nào và nó phải phụ thuộc vào những hệ thống bên ngoài nào.

Ví dụ, nếu chúng ta đang thiết kế một Hệ thống Ngân hàng Trực tuyến (Internet Banking System), sơ đồ có thể thể hiện:

Hình 2: Ví dụ về Sơ đồ Ngữ cảnh Hệ thống cho Hệ thống Ngân hàng Trực tuyến.

  • Trong ví dụ này, Internet Banking System là hệ thống phần mềm chính được đặt ở trung tâm.

  • Personal Banking Customer (Khách hàng cá nhân) là người trực tiếp sử dụng hệ thống này.

  • E-mail System (Hệ thống Email)Mainframe Banking System (Hệ thống ngân hàng cốt lõi) là các hệ thống phần mềm bên ngoài mà Internet Banking System cần tương tác cùng.

Nhìn vào sơ đồ này, chúng ta có thể nhanh chóng hiểu được khách hàng dùng Internet Banking để làm gì, và hệ thống này cần dựa vào các hệ thống khác như thế nào để lấy dữ liệu ngân hàng hoặc gửi email thông báo.


Cấu trúc của System Context Diagram

Sơ đồ này thường đơn giản, không cần quá nhiều chi tiết kỹ thuật.

Hệ thống phần mềm chính được vẽ là một khối hình ở trung tâm. Quanh đó là người dùng và các hệ thống phần mềm khác.

Cần tập trung vào:

  • Người dùng hệ thống

  • Hệ thống bên ngoài mà hệ thống chính tương tác

  • Mối quan hệ giữa chúng

  • Ranh giới hệ thống hoặc ranh giới doanh nghiệp (nếu cần)

Ở cấp độ này, các chi tiết như ngôn ngữ lập trình, bảng database, API, protocol, hay class thường không quan trọng. Mục tiêu là thể hiện bức tranh tổng thể.


Các thành phần chính trong System Context Diagram

Một Sơ đồ Ngữ cảnh Hệ thống thường bao gồm hai loại thành phần cốt lõi:

1. People

1. Con người (People)

Con người ở đây là người dùng, tác nhân (actors), vai trò (roles) hoặc các chân dung khách hàng (personas) có tương tác với hệ thống phần mềm.

Với mỗi đối tượng, chúng ta nên mô tả ngắn gọn:

  • Tên hoặc vai trò (Role).

  • Mô tả ngắn về công việc/hành vi của họ.

  • Mối quan hệ của họ với hệ thống.

Ví dụ: > Khách hàng ngân hàng cá nhân (Personal Banking Customer) Một khách hàng của ngân hàng, người sử dụng Hệ thống Ngân hàng Trực tuyến để xem thông tin tài khoản và thực hiện thanh toán.

Điều này giúp toàn đội ngũ hiểu rõ hệ thống đang được xây dựng để phục vụ ai.


2. Các hệ thống phần mềm bên ngoài (Software Systems)

Đây là các hệ thống khác mà hệ thống chính của chúng ta cần giao tiếp cùng. Những hệ thống này thường nằm ngoài phạm vi kiểm soát của dự án chúng ta đang xây dựng (có thể là hệ thống sẵn có, dịch vụ bên thứ ba hoặc hệ thống nội bộ do một đội ngũ khác quản lý).

Với mỗi hệ thống bên ngoài, chúng ta cần nêu rõ:

  • Tên hệ thống.

  • Mô tả ngắn gọn.

  • Trách nhiệm của hệ thống đó.

Ví dụ: Hệ thống Email (Email System): Hệ thống được sử dụng bởi Hệ thống Ngân hàng Trực tuyến để gửi email đến khách hàng.

Hệ thống Mainframe (Mainframe Banking System): Hệ thống ngân hàng cốt lõi hiện tại, nơi lưu trữ tất cả tài khoản khách hàng, giao dịch và thông tin bảo mật khác.

Việc hiển thị các hệ thống này giúp chúng ta thấy rõ các điểm phụ thuộc (dependencies) của hệ thống chính.


Tương tác giữa các thành phần

Một System Context Diagram tốt không chỉ dừng lại ở việc vẽ các khối hộp và đường mũi tên vô hồn. Mỗi đường liên kết, tương tác cần phải có nhãn (label) rõ ràng để giải thích mục đích của kết nối đó.

Ví dụ:

  • Khách hàng sử dụng Hệ thống Ngân hàng Trực tuyến để xem thông tin tài khoản.

  • Hệ thống Ngân hàng Trực tuyến gửi email bằng cách sử dụng Hệ thống Email.

  • Hệ thống Ngân hàng Trực tuyến lấy thông tin tài khoản từ Hệ thống Mainframe.

Việc dán nhãn các tương tác giúp sơ đồ trở nên cực kỳ dễ đọc. Nếu vẽ quá nhiều đường mũi tên mà không có nhãn thích hợp, người xem sẽ chỉ thấy các thành phần có kết nối với nhau nhưng không thể hiểu tại sao chúng lại kết nối và kết nối để làm gì.


Ranh giới Doanh nghiệp (Enterprise Boundary)

Đôi khi, việc đưa thêm một ranh giới doanh nghiệp vào System Context Diagram là rất hữu ích. Ranh giới này giúp phân định rõ những gì thuộc về nội bộ tổ chức và những gì nằm ở bên ngoài.

Chẳng hạn, trong ví dụ trên, Internet Banking SystemMainframe Banking System đều thuộc quyền sở hữu và nằm trong mạng nội bộ của ngân hàng. Tuy nhiên, Khách hàng lại là thực thể nằm ngoài ranh giới nội bộ đó.

Ranh giới này giúp làm rõ:

  • Hệ thống nào do tổ chức trực tiếp quản lý và sở hữu?

  • Hệ thống nào là phụ thuộc bên ngoài?

  • Người dùng nào đang truy cập từ bên ngoài hệ thống?


Vì sao System Context Diagram hữu ích?

Sơ đồ Ngữ cảnh Hệ thống mang lại rất nhiều giá trị cho dự án nhờ khả năng làm tường minh phạm vi và ngữ cảnh xung quanh phần mềm:

  • Cung cấp một cái nhìn tổng quan ở mức cao nhất.

  • Tránh những hiểu lầm không đáng có về phạm vi hệ thống (System Scope).

  • Chỉ rõ chính xác ai là người dùng hệ thống.

  • Thể hiện rõ ràng các phụ thuộc vào hệ thống bên ngoài.

  • Trở thành cầu nối ngôn ngữ giúp cả dân kỹ thuật (Technical) và dân kinh doanh (Non-technical) dễ dàng thảo luận.

  • Là bệ phóng vững chắc để tiếp tục triển khai các sơ đồ kiến trúc sâu hơn (Cấp độ 2, 3, 4).


Đối tượng sử dụng

Nhờ tính đơn giản và không đặt nặng kỹ thuật, sơ đồ này phù hợp với rất nhiều đối tượng trong một dự án:

  • Lập trình viên (Developers)

  • Kiến trúc sư phần mềm (Software Architects)

  • Chuyên viên phân tích nghiệp vụ (Business Analysts)

  • Quản lý dự án (Project Managers)

  • Khách hàng & các bên liên quan phi kỹ thuật (Clients / Non-technical Stakeholders)


Có bắt buộc phải có System Context Diagram không?

Trong hầu hết các dự án phần mềm, sơ đồ này rất hữu ích và nên được tạo ra. Nó không cần phức tạp — một sơ đồ đơn giản với hệ thống chính, người dùng, hệ thống bên ngoài, và các tương tác có nhãn là đủ. Mục đích không phải tạo ra một sơ đồ đẹp, mà là để mọi người hiểu rõ hệ thống.


Những lỗi thường gặp khi vẽ System Context Diagram

  • Đưa quá nhiều chi tiết kỹ thuật: Ở cấp độ này, đừng cố giải thích các công nghệ, framework hay cấu trúc DB bên trong.

  • Vẽ các mối quan hệ không có nhãn: Mọi đường mũi tên nối giữa các khối bắt buộc phải đi kèm mô tả ngắn về hành động hoặc luồng dữ liệu.

  • Nhầm lẫn giữa thành phần bên ngoài và thành phần bên trong: Hãy nhớ Level 1 chỉ tập trung vào những gì bao quanh hệ thống của bạn, chứ không phải các module hay service nằm bên trong hệ thống đó.

  • Quá phức tạp hóa: Giữ sơ đồ tinh gọn nhất có thể để đảm bảo tính hiệu quả trong việc truyền tải thông tin.

Kết luận

C4 Model là một phương pháp hữu ích để minh họa kiến trúc phần mềm, cho phép mô tả hệ thống ở các mức độ trừu tượng khác nhau, từ bức tranh tổng thể đến các góc nhìn chi tiết hơn khi cần.

Cấp độ đầu tiên, System Context Diagram, đặc biệt quan trọng vì giải thích phạm vi, người dùng, và các phụ thuộc bên ngoài của hệ thống.

Trước khi thảo luận chi tiết kỹ thuật như database, API, component, hay code, ta nên hiểu bối cảnh hệ thống trước.

Một System Context Diagram tốt giúp cả team trả lời ba câu hỏi quan trọng:

Chúng ta đang xây dựng cái gì?
Ai đang sử dụng nó?
Nó tương tác với những hệ thống nào khác?

Vì vậy, System Context Diagram là điểm khởi đầu vững chắc để hiểu và truyền đạt kiến trúc phần mềm.

Tài liệu tham khảo

Bài viết này dựa trên ghi chú học tập của tác giả từ Chương 5 và Chương 6 của The C4 Model for Visualizing Software Architecture của Simon Brown.

Software Design

Part 1 of 5

Software Design Series là chuỗi nội dung khám phá cách thiết kế và tổ chức hệ thống phần mềm hiện đại, từ kiến trúc tổng thể, mô hình hóa hệ thống, design patterns đến các nguyên tắc giúp xây dựng sản phẩm dễ mở rộng, dễ bảo trì và hiệu quả.

Up next

System Landscape Diagram

Khi một hệ thống không đủ — nhìn toàn cảnh bức tranh IT của tổ chức