C4 Model - Phương pháp hay để tiếp cận kiến trúc phần mềm


2. Kiến trúc phần mềm cổ điển

2.1 Khái niệm

Kiến trúc phần mềm cổ điển thường sử dụng các sơ đồ kỹ thuật như:

  • UML Class Diagram
  • UML Component Diagram
  • UML Deployment Diagram
  • Sequence Diagram
  • Layered Architecture Diagram

Mục tiêu chính là mô tả cấu trúc và hành vi của hệ thống từ góc nhìn kỹ thuật.

2.2 Đặc điểm

Các mô hình truyền thống thường tập trung vào:

  • Cấu trúc chi tiết của hệ thống.
  • Quan hệ giữa các lớp (Class).
  • Luồng tương tác giữa các đối tượng.
  • Triển khai phần mềm trên hạ tầng.

Ví dụ, một hệ thống thương mại điện tử có thể được mô tả bằng:

  • Class Diagram cho các thực thể Product, Order, Customer.
  • Sequence Diagram cho quy trình đặt hàng.
  • Deployment Diagram cho máy chủ ứng dụng và cơ sở dữ liệu.

2.3 Ưu điểm

  • Chuẩn hóa và được công nhận rộng rãi.
  • Hỗ trợ phân tích thiết kế chi tiết.
  • Phù hợp với tài liệu kỹ thuật chuyên sâu.
  • Có nhiều công cụ hỗ trợ.

2.4 Hạn chế

  • Khó hiểu đối với người không chuyên kỹ thuật.
  • Tài liệu dễ trở nên lỗi thời.
  • UML thường quá chi tiết cho việc trao đổi kiến trúc tổng quan.
  • Thiếu một cách tiếp cận nhất quán từ mức tổng thể đến chi tiết.

3. C4 Model

3.1 Khái niệm

C4 Model (Context, Container, Component, Code) là phương pháp mô tả kiến trúc phần mềm do Simon Brown phát triển.

Mục tiêu của C4 là cung cấp các sơ đồ kiến trúc dễ hiểu, tập trung vào khả năng giao tiếp giữa các bên liên quan thay vì chỉ phục vụ mục đích kỹ thuật.

C4 chia kiến trúc thành 4 cấp độ:

  1. Context Diagram
  2. Container Diagram
  3. Component Diagram
  4. Code Diagram

3.2 Các cấp độ trong C4 Model

Context Diagram

Mô tả hệ thống như một "hộp đen" trong môi trường hoạt động.

Thể hiện:

  • Người dùng
  • Hệ thống hiện tại
  • Các hệ thống bên ngoài

Ví dụ:

Customer

    ↓

E-Commerce System

    ↓

Payment Gateway

Mục tiêu là giúp lãnh đạo, khách hàng và các bên liên quan hiểu được vai trò của hệ thống.

Container Diagram

Mô tả các khối thực thi chính của hệ thống.

Ví dụ:

  • Web Application
  • Mobile App
  • API Service
  • Database

Sơ đồ này giúp nhóm phát triển hiểu cách hệ thống được chia thành các thành phần triển khai độc lập.

Component Diagram

Mô tả chi tiết bên trong một container.

Ví dụ trong API Service:

  • Product Controller
  • Order Service
  • Payment Service
  • Repository

Mức này tương đương với một phần của UML Component Diagram nhưng được tổ chức rõ ràng hơn.

Code Diagram

Mô tả mã nguồn hoặc lớp chi tiết.

Thông thường sử dụng UML Class Diagram hoặc các sơ đồ tương tự.

4. So sánh Kiến trúc Cổ điển và C4 Model

Tiêu chí

Kiến trúc cổ điển

C4 Model

Mục tiêu

Thiết kế kỹ thuật

Giao tiếp kiến trúc

Độ chi tiết

Thường rất chi tiết

Từ tổng quan đến chi tiết

Khả năng đọc hiểu

Khó với người không kỹ thuật

Dễ hiểu hơn

Tính phân cấp

Không rõ ràng

Rõ ràng theo 4 cấp

Hỗ trợ Microservices

Hạn chế

Rất tốt

Bảo trì tài liệu

Khó cập nhật

Dễ duy trì

Khả năng trình bày với khách hàng

Thấp

Cao

Khả năng mô tả code

Tốt

Tốt (qua Level 4)