Kiến trúc: Monolithic (Kiến trúc một khối)
C# Code
// Đây là một snippet giải thích khái niệm, không phải là code để chạy.
/*
* KIẾN TRÚC MONOLITHIC (KIẾN TRÚC MỘT KHỐI)
*
* Hầu hết các game được làm bằng Unity, đặc biệt là các game offline cho PC/Console hoặc mobile,
* đều tuân theo kiến trúc Monolithic.
*
* 1. ĐẶC ĐIỂM CHÍNH:
* - Tất cả trong một: Toàn bộ mã nguồn (gameplay, UI, AI, âm thanh), tài nguyên (hình ảnh,
* model, âm thanh), và các thư viện đều được đóng gói vào một file thực thi duy nhất
* (ví dụ: .exe trên Windows, .apk trên Android).
* - Liên kết chặt chẽ: Các thành phần khác nhau trong game (ví dụ: Player, Enemy, UI Manager)
* thường gọi hàm và truy cập dữ liệu của nhau một cách trực tiếp.
* - Triển khai đơn giản: Bạn chỉ cần build game một lần và phân phối file đó cho người chơi.
*
* 2. VÍ DỤ TRONG UNITY:
* - Một Scene Unity chứa các GameObject: Player, Enemy, GameManager, UIManager.
* - Script `Player.cs` có thể trực tiếp lấy tham chiếu đến `UIManager` để cập nhật thanh máu.
* `player.GetComponent<UIManager>().UpdateHealthBar(currentHealth);`
* - `GameManager.cs` có thể trực tiếp gọi hàm trên tất cả các `Enemy` để ra lệnh tấn công.
* - Khi bạn nhấn Build, Unity sẽ gom tất cả các script, scene, asset này lại thành một khối.
*
* 3. ƯU ĐIỂM:
* - Dễ phát triển ban đầu: Rất nhanh để bắt đầu và xây dựng các tính năng vì mọi thứ đều có thể
* dễ dàng giao tiếp với nhau.
* - Dễ debug: Bạn có thể debug toàn bộ luồng hoạt động của game trong một tiến trình duy nhất.
* - Hiệu năng cao (cho game offline): Giao tiếp giữa các thành phần diễn ra trong bộ nhớ,
* rất nhanh, không có độ trễ mạng.
*
* 4. NHƯỢC ĐIỂM:
* - Khó bảo trì và mở rộng: Khi dự án lớn lên, các thành phần trở nên phụ thuộc chồng chéo
* (spaghetti code), việc thay đổi một tính năng có thể ảnh hưởng đến nhiều nơi khác.
* - Khó áp dụng công nghệ mới: Toàn bộ ứng dụng phải được xây dựng lại từ đầu nếu muốn
* nâng cấp một phần công nghệ lõi.
* - Khó khăn cho làm việc nhóm: Nhiều người cùng làm việc trên một codebase lớn có thể
* gây ra nhiều xung đột.
*
* KẾT LUẬN:
* Kiến trúc Monolithic là lựa chọn mặc định và hoàn toàn phù hợp cho phần lớn các dự án game.
* Tuy nhiên, để tránh các nhược điểm của nó, lập trình viên cần áp dụng các mẫu thiết kế tốt
* như Observer, Service Locator, hoặc Dependency Injection để giữ cho code base được ngăn nắp.
*/Hiểu rõ về kiến trúc Monolithic - mô hình truyền thống nơi tất cả các thành phần của ứng dụng được xây dựng và triển khai như một đơn vị duy nhất. Đây là kiến trúc mặc định cho hầu hết các game Unity.