software-architecture-nhung-dieu-can-biet

Software Architecture là gì?

1. Định nghĩa

Có rất nhiều khái niệm loằng ngoằng (hơi khó hiểu) về Kiến Trúc Phần Mềm (Software Architecture). Tuy nhiên, một định nghĩa tương đối phổ biến và dễ hiểu được biết đến là

The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them and properties of both.

Kiến trúc phần mềm của một hệ thống là tập hợp các cấu trúc cần thiết để hiểu về hệ thống, bao gồm các thành phần trong phần mềm, quan hệ giữa chúng và thuộc tính của cả hai.

2. Architecture Is a Set of Software Structure

Đầu tiên để hiểu được Kiến Trúc Phần Mềm thì phải hiểu hai chữ phía trước đó. Kiến trúc (Architecture)

A structure is simply a set of elements held together by a relation.

Kiến trúc chỉ đơn giản là một tập hợp các phần tử được liên kết với nhau bằng một mối quan hệ.

Các phần tử liên kết với nhau bằng một mối quan hệ nào đó thì gọi là kiến trúc. Kiến trúc phần mềm (Software Architecture) cũng vậy. Tuy nhiên

Software systems are composed of many structures, and no single structure holds claim to being the architecture.

Hệ thống phần mềm luôn bao gồm nhiều cấu trúc, không có một cấu trúc độc lập nào có thể trở thành một kiến trúc

Định nghĩa dài loằng ngoằng, nhưng bước đầu ta cũng nắm sơ, hiểu mang máng rằng để hiểu về Architecture thì phải hiểu về nhiều cấu trúc, chứ không phải chỉ đơn thuần một cái. Nhưng chốt lại chỉ cần nắm sơ như sau:

  • Kiến trúc = nhiều Cấu Trúc hợp lại (với relation)
  • Cấu trúc = nhiều Phần Tử hợp lại (với relation)

Từ định nghĩa cơ bản này, trong thiết kế phần mềm, người ta chia thành 3 kiểu phổ biến

2.1 Modules

Một vài hệ thống chia thành các modules nhỏ. Một modules sẽ được tính toán cụ thể khối lượng công việc, số lượng teams tham gia

Modules are assigned specific computational responsibilities and are the basis of work assignments for programming teams

Các mô-đun được chia thành các phần tính toán cụ thể và là cơ sở của phân công công việc cho các nhóm

Một ví dụ khác cũng khá phổ biến về Modules là các thành phần hoạt đông độc lập riêng rẽ. Một ứng dụng gọi xe hiện nay có thể chia thành nhiều module hoạt động độc lập (ship hàng, chở người hay đặt đồ ăn).

Các module có chức năng riêng rẽ, nhưng có thể kết hợp để cùng hoạt động. Các hệ thống thiết kế theo hướng modules thường trả lời những câu hỏi sau:

  • What is the primary functional responsibility assigned to each module? – Chức năng chính của mỗi modules là gì?
  • What other software elements is a module allowed to use? – Những thành phần nào khác trong phần mềm module cho phép sử dụng?
  • What other software does it actually use and depend on? – Những phần mềm nào module thực sự sử dụng và phụ thuộc vào?
  • What modules are related to other modules by generalization or specialization? – Những module nào có liên quan tới các module khác (khái quát và chi tiết)

2.2 Component và connector

Trong kiến trúc phần mềm (Software Architecture), ngoài kiến trúc module, có một kiểu thiết kế các thường được sử dụng nữa là Component-and-connector structures (Các thành phần và kết nối).

Kiểu thiết kế này tập trung vào các thành phần trong hệ thống (Components) và cách chúng tương tác với nhau (connector). Hệ thống thiết kế hướng này thường trả lời cho những câu hỏi

  • What are the major executing components and how do they interact at runtime? – Các thành phần chính giữa các components là gì và làm sao chúng tương tác với nhau lúc chạy?
  • What are the major shared data stores? – Phần data nào là quan trọng nhất?
  • Which parts of the system are replicated? – Bộ phần nào của hệ thống được nhân rộng?
  • How does data progress through the system? – Process của data thông qua hệ thống như thế nào?
  • What parts of the system can run in parallel? – Phần nào trong hệ thống có thể chạy song song?
Có gì thắc mắc cứ comment đây nha! - Please feel free to comment here!
Chia sẻ bài viết