Tạo Kiến Trúc Phân Mềm Tinh Gọn Nhất Với C4 Model

Kiến trúc phần mềm với C4 Model

Mô hình C4 là gì? Trong bài viết này mình xin giới thiệu với mọi người về C4 Model mà mọi Software Architect nên biết, nó sẽ giúp các bạn trình bày tài liệu thiết kế một cách hệ thống và giải quyết triệt để được những vấn đề hay gặp phải như:

  • Không có tài liệu thiết kế hay tài liệu không được cập nhật
  • Quá nhiều hoặc quá ít thông tin
  • Lộn xộn và khó hiểu

Nếu bạn làm phần mềm thị trường châu âu, hay vùng D.A.CH (Germany, Austria, Switzerland) thì các bạn nên xem thêm Tạo Tài Liệu Thiết Kế Hoàn Chỉnh Với Arc42, nếu ngoài vùng trên thì C4 model được sử dụng rất phổ biến trên mọi nghành nghề và độ lớn của công ty.

Mình đã unlearn (quên những điều đã học) về cách mình hay làm tài liệu thiết kế cấp cao (HLD), tài liệu thiết kế chi tiết (LLD) trong chục năm để có thể tiếp cận được cái mới hơn. C4 Model hiện tại cũng được công ty mình sử dụng cho rất nhiều dự án phần mềm lớn chuyên về nghành ô tô với độ phức tạp trong thiết kế cực kỳ cao, theo đó mình khẳng định rằng cấu trúc này là rất tối ưu cho việc mô tả những khối tĩnh của hệ thống cũng như là tạo cấu trúc sườn cho tài liệu thiết kế hệ thống,

Vì sao mình dùng từ tối ưu? chúng ta hãy cùng bắt đầu nào. Nếu bạn thấy bài viết hay thì hãy chia sẽ cho bạn bè cùng biết nhé.

Phần 1 – Mô Tả Kiến Trúc Của Hệ Thống

Mô hình C4 là một phương pháp mô tả kiến trúc phần mềm một cách tinh gọn nhất. Nó bao gồm một tập hợp 4 sơ đồ mô tả cấu trúc tĩnh của một hệ thống phần mềm.

Nhìn chung, C4 cố gắng tạo ra sự rõ ràng để truyền đạt câu chuyện thiết kế đến người đọc, đồng thời làm theo câu “thần chú” của Shneiderman: “Tổng quan trước tiên, phóng to thu nhỏ và lược bớt, cuối cùng là sự chi tiết theo yêu cầu nếu cần

Nhưng mà C4 là gì?

Hình 1 – Mô tả kiến trúc của hệ thống bằng 4 hình tĩnh

Chữ C được lấy từ 4 hình vẽ chính trong mô hình này đó là: Context, Container, Component, Code (hay còn được gọi là Class).

  • System Context: Sơ đồ này mô tả tổng quát về hệ thống theo hướng che đi thành phần bên trong mà chỉ làm nổi bật thành phần bên ngoài (blackbox); bao gồm các yếu tố phụ thuộc chính (dependencies) của hệ thống, các giao thức (interfaces) để giao tiếp giữa những hệ thống với nhau và con người (người dùng / theo vai trò / theo phòng ban / v.v). Biểu đồ ngữ cảnh này là tiêu chuẩn trong kỹ thuật phần mềm.
  • Container: Sơ đồ này mô tả về hệ thống theo hướng hiển thị thành phần bên ngoài cùng với việc phóng to những thành phần bên trong của hệ thống (whitebox); do đó hiển thị được các container (building block), mục đích và nhiệm vụ của từng container này, cùng với giao thức giao tiếp giữa những container đó. Sơ đồ này thường được gọi là sơ đồ khối cấp 1 (first level building block). Vậy container cụ thể là cài vẹo gì? Tuỳ theo phạm vi hệ thống các bạn đang làm (có thể là hệ thống, có thể là 1 component, cũng có thể là 1 hệ thống con), container có thể là cái máy tính, vi xử lý, cũng có thể là 1 dịch vụ (service) nào đó gởi email, lưu trữ, APIs…
  • Component: Sở đồ này phóng to container để mô tả về thành phần bên trong; do đó hiển thị được các components (building block), mục đích và nhiệm vụ, mối quan hệ của từng component cũng như là những giao thức kết nối. Sơ đồ này thường được gọi là sơ đồ khối cấp 2.
  • Code (hay class): Sơ đồ này mô tả bên trong một component; theo đó hiển thị được các phần hiện thực như là class, package… cùng với mối quan hệ giữa những thành phần này

Bắt đầu như thế nào?

  1. Khi mà team bạn đã quyết định chọn một tập hợp các yếu tố trừu tượng mà bạn sẽ sử dụng để truyền đạt kiến trúc phần mềm. “Mô hình C4” là một cách phân cấp để thiết kế về cấu trúc tĩnh của một hệ thống phần mềm về những container, thành phần và lớp (hoặc mã nguồn).
  2. Theo đó mô hình C4 có thể tóm tắt một hệ thống của bạn như sau: Hệ thống phần mềm được tạo thành từ một hoặc nhiều container (ứng dụng web, ứng dụng dành cho thiết bị di động, ứng dụng máy tính để bàn, cơ sở dữ liệu, hệ thống tệp, v.v.), mỗi ứng dụng (container) chứa một hoặc nhiều các thành phần (component), lần lượt được thực hiện bởi một hoặc nhiều lớp (code). Bạn có thể sử dụng UML để thiết kết ra những mô hình này nhé.
  3. Một tập hợp được trừu tượng (bỏ đi sự chi tiết không cần thiết) quan trọng hơn một ký hiệu thông thường, nhưng phải đảm bảo rằng ký hiệu của bạn (hình dạng, màu sắc, kiểu đường kẻ, từ viết tắt, v.v.) có ý nghĩa. Nếu cảm thấy chưa rõ khi hình những hình vẽ này thì hãy thêm chú giải nhé, ngay cả khi bạn đang sử dụng UML.
  4. Nếu cần mô tả thêm sự tương tác cho các thành phần tĩnh trong hệ thống, bạn có thể sử dụng các sơ đồ bổ sung nhằm truyền đạt hành vi thời gian chạy và triển khai. Một số sơ đồ trong UML có thể giúp ích trong việc này: Sơ đồ Activity, Sơ đồ Sequense, Sơ đồ deployment

Các bạn có thể xem thêm bản tiếng anh ở đây nhé: http://static.codingthearchitecture.com/visualising-software-architecture.pdf

Phần 2 – Tạo Tài Liệu Kiến Trúc

Hình 2 – Cấu trúc chính cho tài liệu kiến trúc theo C4 Model

Sau khi bạn sử dụng C4 Model để phân tách các thành phần trong hệ thống cùng với một số sơ đồ bổ sung cho sự tương tác. Đã đến lúc tạo ra tài liệu thiết kế hoàn chỉnh.

C4 Model có đưa ra cấu trúc cơ bản để có tài liệu hoàn chỉnh nhất, nếu như phần nào không cần thiết thì các bạn cũng có thể bỏ đi nhé. Các bạn có thể xem thêm về cấu trúc này ở đây nhé: http://static.codingthearchitecture.com/documenting-software-architecture.pdf

Một số gợi ý để có thể tạo tài liệu C4 model hiệu quả:

  • Hãy nghĩ về tài liệu bổ sung như một cuốn sách hướng dẫn bao gồm bản đồ, điểm ưa thích, điểm tham quan, hành trình, lịch sử, văn hóa, thông tin thực tế,… . Do đó tài liệu này phải thật đơn giản nhưng đầy đủ để có thể đọc được trong 1-2 giờ và cung cấp cho các nhà phát triển phần mềm đầy đủ thông tin để bắt đầu, thúc đẩy quá trình khám phá một hệ thống không quen thuộc với họ.
  • Tài liệu không phải là nhiệm vụ một lần. Thay vào đó, hãy tạo tài liệu và luôn luôn cập nhật và phát triển liên tục. Hãy tự động cập nhật nó bằng cách sử dụng công cụ hoặc bằng cách thêm một mục vào “định nghĩa về việc đã làm” của bạn.
  • Có nhiều tùy chọn dụng cụ; từ Microsoft Word và Atlassian Confluence đến các tập tin Markdown và AsciiDoc được phiên bản cùng với mã nguồn. Giảm trùng lặp và tăng tính nhất quán bằng cách tạo sơ đồ và tài liệu từ một nguồn nếu có thể.

Kết hợp giữa Arc42 với C4 Model

Cá nhân mình nhận xét thì C4 Model đưa ra concept rất tối ưu và tinh gọn cho việc phân tách hệ thống và Arc42 đưa ra cấu trúc rất hệ thống cho một tài liệu thiết kế. Nếu kết hợp lại giữa cấu trúc từ Arc42 và hình vẽ phân tách từ C4 Model thì sẽ là một mô hình rất phù hợp với mình vì nó đem lại sự tinh gọn và mạch lạc từ cấu trúc tài liệu.

Theo đó sự kết hợp sẽ là:

  • Context and Scope => System Context diagram
  • Level 1 Building Block View => Container diagram
  • Level 2 Building Block View => Component diagram
  • Level 3 Building Block View => Class diagram

Lời Kết

Hãy chia sẽ ngay với bạn bè nếu các bạn thấy hay và ý nghĩa

Xem thêm

Video giới thiệu

AppsIndie