de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Thì Mô hình C4, được phát triển bởi Simon Brown, là một phương pháp mạnh mẽ, phân cấp để trực quan hóa kiến trúc phần mềm. Nó sử dụng bốn mức độ trừ tượng để cung cấp mức độ chi tiết phù hợp cho các đối tượng khác nhau, từ các bên liên quan kinh doanh đến các nhà phát triển. Điều này khiến nó trở thành lựa chọn lý tưởng để tạo ra tài liệu rõ ràng, dễ bảo trì và tập trung vào đối tượng người đọc.

Introduction to C4 Model: a Quick Guide - Visual Paradigm Blog

Hướng dẫn toàn diện này được lấy cảm hứng từ nghiên cứu điển hình nổi tiếng về Hệ thống Ngân hàng Trực tuyến của Big Bank plc — một ví dụ hư cấu nhưng thực tế về việc xây dựng nền tảng ngân hàng trực tuyến cho khách hàng cá nhân để xem tài khoản và thực hiện thanh toán. Nghiên cứu điển hình này minh họa cách áp dụng mô hình C4 một cách dần dần, sử dụng PlantUML để thực hiện “kiến trúc dưới dạng mã”. Nó cũng tích hợp các công cụ hiện đại như Studio C4 PlantUML được tích hợp AI của Visual Paradigm (được phát hành vào cuối năm 2025) nhằm tăng tốc quá trình tạo và bảo trì.

Tổng quan về mô hình C4

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

  1. Cấp độ 1: Bối cảnh Hệ thống — Góc nhìn tổng thể: hệ thống, người dùng và các phụ thuộc bên ngoài.

  2. Cấp độ 2: Các Container — Các đơn vị triển khai chính (ứng dụng, dịch vụ, cơ sở dữ liệu) và các lựa chọn công nghệ cấp cao.

  3. Cấp độ 3: Các Thành phần — Các khối xây dựng logic nội tại bên trong một container.

  4. Cấp độ 4: Mã nguồn — Chi tiết cấp thấp tùy chọn (ví dụ: lớp); thường bị bỏ qua để thay vào đó là tham chiếu đến mã nguồn.

Các quan điểm hỗ trợ bổ sung bao gồm sơ đồ động (luồng thời gian chạy) và sơ đồ triển khai.

Áp dụng mô hình C4: Nghiên cứu điển hình về Hệ thống Ngân hàng Trực tuyến của Big Bank plc

Cấp độ 1: Sơ đồ Bối cảnh Hệ thống

Mục đích: Cung cấp cái nhìn tổng quan cấp cao cho các bên liên quan kinh doanh và đối tượng không chuyên, minh họa cách Hệ thống Ngân hàng Trực tuyến phù hợp với môi trường rộng lớn hơn mà không cần dùng thuật ngữ kỹ thuật.

Các yếu tố chính:

  • Người: Khách hàng Ngân hàng Cá nhân — Một khách hàng sở hữu một hoặc nhiều tài khoản ngân hàng cá nhân.

  • Hệ thống phần mềm: Hệ thống Ngân hàng trực tuyến — Cho phép khách hàng xem thông tin tài khoản và thực hiện thanh toán.

  • Hệ thống bên ngoài:

    • Hệ thống Ngân hàng cốt lõi (mainframe hiện có) — Xử lý dữ liệu khách hàng, tài khoản và giao dịch.

    • Hệ thống Email (ví dụ: AWS SES) — Gửi xác nhận và thông báo.

Mối quan hệ:

  • Khách hàng sử dụng hệ thống Ngân hàng trực tuyến.

  • Hệ thống Ngân hàng trực tuyến sử dụng hệ thống Ngân hàng cốt lõi để xử lý dữ liệu và giao dịch.

  • Hệ thống Ngân hàng trực tuyến gửi email thông qua hệ thống Email.

Mức độ này giữ cho mọi thứ đơn giản và rõ ràng về phạm vi và các tích hợp.

Ví dụ PlantUML (lấy từ nghiên cứu trường hợp):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()

title Sơ đồ Bối cảnh Hệ thống (Mức 1) cho Hệ thống Ngân hàng Trực tuyến
Person(customer, "Khách hàng Ngân hàng Cá nhân", "Một khách hàng có một hoặc nhiều tài khoản ngân hàng cá nhân.")
System(internet_banking_system, "Hệ thống Ngân hàng Trực tuyến", "Cho phép khách hàng xem tài khoản và thực hiện thanh toán.")
System(core_banking_system, "Hệ thống Ngân hàng Cốt lõi", "Mainframe hiện có xử lý dữ liệu khách hàng, tài khoản và giao dịch.")
System_Ext(email_system, "Hệ thống Email", "Dịch vụ Email Đơn giản của Amazon Web Services (AWS SES) để gửi xác nhận.")
Rel(customer, internet_banking_system, "Sử dụng")
Rel(internet_banking_system, core_banking_system, "Sử dụng")
Rel(internet_banking_system, email_system, "Gửi email thông qua")
@enduml

Mức 2: Sơ đồ Container

Mục đích: Thu nhỏ để hiển thị các khối xây dựng chính (container) và các lựa chọn công nghệ, hướng đến các kiến trúc sư, nhà phát triển và đội ngũ DevOps.

Các yếu tố chính (nằm trong biên giới Hệ thống Ngân hàng Trực tuyến):

  • Ứng dụng Trang Đơn (SPA) — JavaScript + Angular, giao diện người dùng đầy đủ trong trình duyệt web.

  • Ứng dụng Di động — iOS/Android với React Native (hoặc tương tự), chức năng hạn chế.

  • Ứng dụng API — Java + Spring Boot, API JSON/HTTPS phục vụ cả hai giao diện người dùng.

  • Cơ sở dữ liệu — PostgreSQL, lưu trữ dữ liệu phiên làm việc, cài đặt và bản tóm tắt đã được lưu tạm (dữ liệu cốt lõi vẫn nằm trên máy chủ chính).

Bên ngoài — Hệ thống Ngân hàng cốt lõi và Hệ thống Email.

Mối quan hệ:

  • Khách hàng sử dụng SPA và Ứng dụng di động qua HTTPS.

  • SPA và Ứng dụng di động gọi đến Ứng dụng API (JSON/HTTPS).

  • Ứng dụng API đọc/ghi vào Cơ sở dữ liệu (JDBC/SQL).

  • Ứng dụng API tương tác với Hệ thống Ngân hàng cốt lõi (JSON/HTTPS) và Hệ thống Email (HTTPS).

Sơ đồ này đóng vai trò là ‘nguồn duy nhất đáng tin cậy’ cho các quyết định công nghệ.

Ví dụ PlantUML (sử dụng sprite cho biểu tượng):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/angular.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/java.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/postgresql.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Sơ đồ Container C4 cho Hệ thống Ngân hàng Trực tuyến
Person(customer, "Khách hàng Ngân hàng Cá nhân", "Một khách hàng có một hoặc nhiều tài khoản ngân hàng cá nhân.")
System_Boundary(internet_banking_system, "Hệ thống Ngân hàng Trực tuyến") {
    Container(spa, "Ứng dụng Trang Đơn", "JavaScript + Angular", "Giao diện người dùng toàn diện cho ngân hàng trực tuyến", $sprite="angular")
    Container(mobile_app, "Ứng dụng Di động", "iOS/Android (React Native)", "Chức năng hạn chế", $sprite="react")
    Container(api_app, "Ứng dụng API", "Java + Spring Boot", "API JSON/HTTPS", $sprite="java")
    ContainerDb(database, "Cơ sở dữ liệu", "PostgreSQL", "Dữ liệu phiên làm việc, cài đặt, bản tóm tắt đã được lưu tạm", $sprite="postgresql")
}
System(core_banking_system, "Hệ thống Ngân hàng Cốt lõi", "Máy chủ chính hiện có...")
System_Ext(email_system, "Hệ thống Email", "AWS SES...")
Rel(customer, spa, "Sử dụng", "HTTPS")
Rel(customer, mobile_app, "Sử dụng", "HTTPS")
Rel(spa, api_app, "Gọi", "JSON/HTTPS")
Rel(mobile_app, api_app, "Gọi", "JSON/HTTPS")
Rel(api_app, database, "Đọc và Ghi vào", "JDBC/SQL")
Rel(api_app, core_banking_system, "Truy vấn / Cập nhật", "JSON/HTTPS")
Rel(api_app, email_system, "Gửi email qua", "HTTPS")
@enduml

Mức 3: Sơ đồ Thành phần

Mục đích: Chi tiết cấu trúc nội bộ của một thành phần chính (ở đây là Ứng dụng API) dành cho các đội phát triển.

Các thành phần chính (bên trong Ứng dụng API):

  • Bộ điều khiển Tài khoản (Spring MVC) — Cung cấp bản tóm tắt và số dư.

  • Bộ điều khiển Xác thực (Spring MVC) — Đăng nhập, phiên làm việc, mã thông báo.

  • Bộ điều khiển Đặt lại Mật khẩu (Spring MVC) — Đặt lại mật khẩu qua email.

  • Thành phần Bảo mật (Spring Bean) — Xác thực, JWT, băm.

  • Thành phần Quản lý Tài khoản (Spring Bean) — Điều phối các cuộc gọi đến Hệ thống Ngân hàng Cốt lõi.

  • Thành phần Thông báo Email (Spring Bean) — Gửi email.

Tương tác — Các bộ điều khiển sử dụng Bảo mật; Quản lý Tài khoản sử dụng Hệ thống Ngân hàng Cốt lõi; Email sử dụng Cơ sở dữ liệu; giao diện người dùng gọi đến các bộ điều khiển.

Ví dụ PlantUML:

PlantUML Diagram

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title Sơ đồ thành phần cho Hệ thống Ngân hàng Trực tuyến - Ứng dụng API
Container(spa, "Ứng dụng Trang Đơn", "javascript và angular", "...")
Container(ma, "Ứng dụng Di động", "...", "...")
ContainerDb(db, "Cơ sở dữ liệu", "...", "...")
System_Ext(mbs, "Hệ thống Ngân hàng Mainframe", "...")
Container_Boundary(api, "Ứng dụng API") {
    Component(accounts, "Bộ điều khiển Tài khoản", "Spring MVC", "...")
    Component(auth, "Bộ điều khiển Xác thực", "Spring MVC", "...")
    Component(reset, "Bộ điều khiển Đặt lại Mật khẩu", "Spring MVC", "...")
    Component(security, "Thành phần Bảo mật", "Spring Bean", "...")
    Component(accountmgmt, "Thành phần Quản lý Tài khoản", "Spring Bean", "...")
    Component(email, "Thành phần Thông báo Email", "Spring Bean", "...")
    Rel(accounts, security, "Sử dụng")
    Rel(auth, security, "Sử dụng")
    Rel(reset, security, "Sử dụng")
    Rel(accountmgmt, mbs, "Sử dụng", "XML/HTTPS")
    Rel(email, db, "Đọc", "JDBC")
}
Rel(spa, accounts, "Sử dụng", "JSON/HTTPS")
Rel(spa, auth, "Sử dụng", "JSON/HTTPS")
Rel(spa, reset, "Sử dụng", "JSON/HTTPS")
Rel(ma, accounts, "Sử dụng", "JSON/HTTPS")
Rel(ma, auth, "Sử dụng", "JSON/HTTPS")
Rel(ma, reset, "Sử dụng", "JSON/HTTPS")
@enduml

Mức 4: Sơ đồ Mã nguồn (Tùy chọn)

Mục đích: Hiển thị chi tiết ở cấp độ lớp cho các khu vực cụ thể (ví dụ: Xác thực).

Thường bị bỏ qua — thay vào đó, trỏ đến mã nguồn thay vì mô tả.

Ví dụ — Sơ đồ lớp UML cho Xác thực:

  • AuthenticationController sử dụng JwtTokenProvider và UserRepository.

Ví dụ PlantUML:

@startuml
classDiagram
class "AuthenticationController" {
    +login(credentials)
    +refreshToken()
}
class "JwtTokenProvider" {
    +generateToken(user)
    +validateToken(token)
}
class "UserRepository" {
    +findByUsername()
}
AuthenticationController ..> JwtTokenProvider : "sử dụng"
AuthenticationController ..> UserRepository : "sử dụng"
@enduml

Các quan điểm Hỗ trợ

  • Sơ đồ Động (ví dụ: chuỗi “Xem Tóm tắt Tài khoản”): Khách hàng → SPA → API → Cơ sở dữ liệu/Ngân hàng Lõi → Phản hồi.

  • Sơ đồ Triển khai: Ánh xạ các thành phần đến hạ tầng (ví dụ: AWS EC2 cho API, RDS cho Cơ sở dữ liệu, mainframe nội bộ).

Tận dụng các công cụ được hỗ trợ bởi AI của Visual Paradigm

Của Visual Paradigm Studio C4 PlantUML được hỗ trợ bởi AI (được phát hành cuối năm 2025) cách mạng hóa quy trình này:

  • Nhập ngôn ngữ tự nhiên (ví dụ: “Tạo mô hình C4 cho hệ thống ngân hàng trực tuyến với SPA, ứng dụng di động, API Spring Boot, PostgreSQL và tích hợp mainframe”).

  • AI tạo mã PlantUML và sơ đồ cho tất cả các cấp độ.

  • Sử dụng chatbot AI để lặp lại (ví dụ: “Thêm xác thực hai yếu tố vào thành phần xác thực” hoặc “Tạo sơ đồ triển khai trên AWS”).

  • Duy trì tính nhất quán giữa các cấp độ và hỗ trợ “tài liệu sống.”

  • Xuất, quản lý phiên bản và tích hợp với kho lưu trữ.

Công cụ này cung cấp đầu ra có cấu trúc, tuân thủ C4 một cách đáng tin cậy hơn nhiều so với các AI thông dụng.

Thực hành Tốt nhất

  1. Bắt đầu bằng các buổi làm việc nhóm — Sử dụng bảng trắng cho Mức 1 để thống nhất các bên liên quan.

  2. Xem kiến trúc như mã nguồn — Lưu các tệp PlantUML trong kho mã của bạn để cập nhật tự động khi có thay đổi mã nguồn.

  3. Tự động hóa với AI — Sử dụng Visual Paradigm để tạo và tinh chỉnh sơ đồ một cách nhanh chóng.

  4. Tập trung vào đối tượng người dùng — Bỏ qua các chi tiết kỹ thuật ở Mức 1; thêm dần theo từng bước.

  5. Giữ cho nó nhẹ nhàng — Chỉ chi tiết hóa các thành phần phức tạp ở Mức 3; bỏ qua Mức 4 trừ khi thực sự cần thiết.

  6. Phát triển tài liệu — Làm cho sơ đồ trở thành “sống động” để tránh các tài liệu lỗi thời.

Nghiên cứu trường hợp Big Bank plc vẫn là một ví dụ tiêu biểu về hiệu quả của mô hình C4 trong các tình huống thực tế, thúc đẩy sự rõ ràng, hợp tác và giao tiếp kiến trúc có thể mở rộng. Để biết thêm, hãy khám phá trang web chính thức của C4 hoặc các công cụ AI của Visual Paradigm.

This post is also available in Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語, Polski, Portuguese, Ру́сский, 简体中文 and 繁體中文.