Component-Based Architecture
Component-Based Architecture (CBA) — "A software engineering paradigm that emphasizes the decomposition of systems into independent, reusable, replaceable, and composable components, each encapsulating a set of related functionality with well-defined interfaces." — Clemens Szyperski, 1997
Tổng quan
Component-Based Architecture (CBA) là một kiến trúc phần mềm trong đó hệ thống được xây dựng từ các component độc lập, có thể tái sử dụng, thay thế được, và có thể kết hợp với nhau thông qua các interface được định nghĩa rõ ràng. Mỗi component là một đơn vị triển khai độc lập, chứa cả code lẫn dữ liệu (hoặc reference đến dữ liệu) cho một chức năng cụ thể.
Khác với Object-Oriented Programming (OOP) nơi đơn vị cơ bản là object (instance của class), CBA lấy component làm đơn vị kiến trúc cơ bản. Một component thường chứa nhiều class, resources, configuration, và đôi khi là toàn bộ một subsystem.
Nguồn gốc và lịch sử:
- 1986 — Brad Cox: Khái niệm "Software IC" — phần mềm như chip điện tử, có thể cắm ghép
- 1990s — Microsoft COM/DCOM: Component Object Model — binary standard cho component interaction
- 1996 — Sun JavaBeans: Component model cho Java
- 1998 — CORBA Component Model (CCM): OMG standard cho distributed components
- 2000s — Enterprise JavaBeans (EJB): Component model cho enterprise Java
- 2000s — .NET Components: Assembly, NuGet packages
- 2010s — Microservices: Kiến trúc component ở cấp độ service
- 2020s — Web Components: W3C standard cho reusable UI components
Những người tiên phong:
| Tên | Đóng góp |
|---|---|
| Brad Cox | "Software IC" concept — nền tảng cho CBA |
| Clemens Szyperski | Định nghĩa chuẩn về Component Software |
| Grady Booch | UML — component diagram notation |
| Robert C. Martin | SOLID principles — nền tảng cho component design |
| Ivar Jacobson | Component-Based Software Engineering (CBSE) |
Phân biệt với các khái niệm liên quan:
| Khái niệm | So với Component |
|---|---|
| Object (OOP) | Component CHỨA nhiều objects. Component là deployment unit, object là runtime unit. |
| Module | Module là logical grouping. Component là physical deployment unit (JAR, DLL, package) |
| Microservice | Microservice là component triển khai độc lập qua network. Component có thể in-process. |
| Package | Package là distribution unit. Component là runtime unit + deployment unit. |
Bài toán
Vấn đề 1: Tái sử dụng code thất bại
Một tập đoàn tài chính có 5 sản phẩm phần mềm khác nhau: Internet Banking, Mobile Banking, Core Banking, CRM, và Risk Management. Mỗi sản phẩm đều cần xử lý "User Authentication" và "Transaction Logging". Nhưng mỗi đội implement riêng:
- Team A dùng bcrypt + PostgreSQL
- Team B dùng scrypt + MongoDB
- Team C dùng SHA-256 + file log
Kết quả: code trùng lặp, security inconsistency, khó audit, lãng phí 2000+ giờ dev mỗi năm. CBA giải quyết bằng cách đóng gói Authentication và Logging thành shared components. Mỗi sản phẩm chỉ cần khai báo dependency, import component, configure, và dùng. Component được maintain bởi một team riêng, security best practices được áp dụng một lần.