Trải qua quá trình nghiên cứu và phát triển (R&D) chuyên sâu, nhiều lần lặp lại thiết kế và vô số giờ thử nghiệm, đội ngũ phát triển Gland Framework vui mừng thông báo những cập nhật quan trọng. Sau nhiều tuần miệt mài tái cấu trúc và suy nghĩ lại cốt lõi của framework, chúng tôi tự tin khẳng định:
Gland giờ đây đã hoàn toàn độc lập giao thức (protocol-agnostic) và 100% hướng sự kiện (event-driven).
Lấy cảm hứng từ các kiến trúc mạnh mẽ như NestJS và Angular, Gland phát triển ý tưởng về tiêm phụ thuộc (dependency injection) và tính mô-đun lên một tầm cao mới, với một “twist” độc đáo tạo nên sự khác biệt so với những framework hiện có.
Trong bài viết trước, chúng tôi đã giới thiệu về Gland và mô tả bản chất hướng sự kiện của nó. Ngay từ đầu, Gland đã được thiết kế để gọn nhẹ, tối giản và hầu như không phụ thuộc vào các thư viện bên ngoài. Tuy nhiên, ở phiên bản đó, Gland vẫn còn một sự gắn kết chặt chẽ với giao thức HTTP.
Điều đó đã thay đổi hoàn toàn ngay lúc này.
Mục lục
Những Điểm Mới Nổi Bật
Phiên bản cập nhật của Gland mang đến nhiều thay đổi cốt lõi, định hình lại cách bạn xây dựng ứng dụng Node.js.
Độc Lập Giao Thức (Protocol Agnosticism)
Đây là một trong những cột mốc quan trọng nhất trong hành trình phát triển của Gland. Framework không còn bị ràng buộc vào HTTP nữa.
Package @glandjs/core
đã được thiết kế lại hoàn toàn để trở nên độc lập tuyệt đối với bất kỳ lớp truyền tải hoặc giao thức nào. Điều này mở ra khả năng làm việc liền mạch với HTTP, WebSocket, RPC, MQTT hoặc bất kỳ giao thức nào khác mà bạn cần. Sự độc lập này mang lại sự linh hoạt chưa từng có, cho phép bạn sử dụng Gland để xây dựng đa dạng các loại ứng dụng, từ API RESTful truyền thống đến các hệ thống thời gian thực hoặc microservices sử dụng nhiều giao thức khác nhau.
Giới Thiệu Bộ Chuyển Đổi Broker (Broker Adapters)
Chúng tôi đã giới thiệu một khái niệm mới gọi là Bộ chuyển đổi Broker (Broker Adapters). Chúng đóng vai trò là cầu nối giữa giao thức bạn chọn và hệ thống sự kiện nội bộ của Gland. Bạn muốn sử dụng HTTP? Chỉ cần tạo một adapter cho nó. Bạn đang tìm cách làm việc với WebSocket, Fastify hay MQTT? Đơn giản là xây dựng một adapter phù hợp với nhu cầu của mình.
Hiện tại, đã có một adapter hoạt động tốt cho Express thông qua package @glandjs/express
. Kế hoạch tiếp theo là hỗ trợ Fastify, sau đó là các giao thức bổ sung như WebSocket và MQTT. Hệ thống adapter này được thiết kế để mở rộng, khuyến khích cộng đồng đóng góp adapter cho các giao thức và thư viện phổ biến khác.
Lớp Trừu Tượng HTTP (HTTP Abstraction Layer)
Package @glandjs/http
cũ đã được tách và trừu tượng hóa. Nó không còn triển khai một máy chủ HTTP cụ thể nữa. Thay vào đó, nó chỉ cung cấp các decorators và cấu trúc (như @Get()
, @Post()
, v.v.) để định nghĩa các endpoint HTTP. Việc triển khai máy chủ thực tế giờ đây nằm trong các adapter cụ thể cho từng giao thức, ví dụ như Express hoặc Fastify. Điều này làm cho logic xử lý HTTP của bạn trở nên độc lập với thư viện máy chủ HTTP bạn sử dụng, tăng khả năng tái sử dụng và dễ dàng chuyển đổi.
Vẫn 100% Hướng Sự Kiện (Event-Driven System – EDS)
Gland vẫn duy trì hoàn toàn dựa trên Hệ thống Hướng Sự kiện (EDS). Điều này có nghĩa là mọi thứ – từ việc gọi controller đến logic nội bộ – đều được xử lý thông qua các sự kiện, chứ không phải các lời gọi phương thức trực tiếp. Kiến trúc này làm cho framework trở nên mô-đun hóa cao, có khả năng mở rộng và cực kỳ linh hoạt. Mô hình hướng sự kiện giúp dễ dàng quản lý các tác vụ bất đồng bộ, xây dựng các hệ thống phân tán và phản ứng nhanh chóng với các thay đổi.
Ví Dụ Thực Tế với Express
Dưới đây là một ví dụ cập nhật và hoạt động sử dụng Express làm adapter, minh họa sự đơn giản và hiệu quả của kiến trúc mới:
import { Controller, Module } from '@glandjs/common';
import { Get } from '@glandjs/http'; // Decorators từ lớp trừu tượng HTTP
import { GlandFactory } from '@glandjs/core'; // Core độc lập giao thức
import { ExpressBroker, type ExpressContext } from '@glandjs/express'; // Adapter cho Express
// Định nghĩa Controller sử dụng decorators HTTP
@Controller('/')
class UserController {
@Get() // Sử dụng decorator @Get từ lớp trừu tượng HTTP
index(ctx: ExpressContext) {
// Logic xử lý sử dụng context từ adapter Express
ctx.res.send('Hello World');
}
}
// Định nghĩa Module sử dụng Controller
@Module({
controllers: [UserController],
})
class AppModule {}
// Hàm khởi tạo ứng dụng
async function bootstrap() {
// Tạo instance của Gland từ core
const app = await GlandFactory.create(AppModule);
// Kết nối Gland với adapter Express Broker
const express = app.connectTo(ExpressBroker); // Type-safety hoàn toàn
// Khởi động máy chủ Express thông qua adapter
express.listen(3000, () => {
console.log('Server running on port 3000');
});
}
bootstrap();
Với cấu trúc này, bạn có thể sử dụng Gland với bất kỳ giao thức nào chỉ đơn giản bằng cách “cắm” adapter thích hợp vào. Express hoạt động ngay hôm nay, Fastify sẽ sớm ra mắt, sau đó là WebSocket, và xa hơn nữa—bất cứ điều gì bạn cần, Gland đều có thể hỗ trợ thông qua hệ thống adapter linh hoạt.
Tương Lai của Gland Framework
Với những cập nhật này, Gland đã đạt khoảng 80% mức độ hoàn thiện theo tầm nhìn kiến trúc ban đầu. Công việc còn lại tập trung vào:
- Hoàn thiện các API để đảm bảo tính nhất quán và dễ sử dụng.
- Ổn định hệ thống sự kiện, tối ưu hóa hiệu suất và độ tin cậy.
- Hoàn thành tích hợp với nhiều giao thức phổ biến khác.
- Xây dựng tài liệu toàn diện và website chính thức để hướng dẫn người dùng.
Các trụ cột cốt lõi – Tiêm phụ thuộc (DI), kiến trúc mô-đun, độc lập giao thức và luồng xử lý dựa trên sự kiện – giờ đây đã vững chắc như bàn thạch. Và vâng, bạn hoàn toàn có thể cân nhắc sử dụng Gland trong môi trường sản phẩm nếu cách tiếp cận của nó phù hợp với trường hợp sử dụng của bạn. Mục tiêu của Gland là cung cấp một bộ công cụ tối giản nhưng mạnh mẽ, có khả năng phát triển cùng với nhu cầu của bạn.
Bước Tiếp Theo Là Gì?
Roadmap trước mắt của Gland tập trung vào việc mở rộng khả năng tích hợp và cải thiện trải nghiệm người dùng:
- Hỗ trợ Fastify – Đã được triển khai và đang trong quá trình hoàn thiện.
- Adapter WebSocket – Dự kiến sau khi hoàn thành Fastify.
- Tài liệu và Website – Đang được xây dựng bằng Astro và GitHub Pages.
- Kiểm thử và Ổn định – Đảm bảo Gland được kiểm tra kỹ lưỡng hơn cho các kịch bản sản phẩm.
Thảo Luận & Đóng Góp
Chúng tôi thực sự hào hứng với giai đoạn phát triển mới này của Gland và rất mong nhận được ý kiến đóng góp từ cộng đồng.
- Bạn có thấy cách tiếp cận độc lập giao thức này hấp dẫn không?
- Bạn dự đoán những thách thức tiềm năng nào trong một hệ thống hướng sự kiện như thế này?
- Bạn muốn đóng góp như thế nào – qua code, tài liệu hay phản hồi?
Nếu bạn cũng đam mê kiến trúc mô-đun, độc lập giao thức và hướng sự kiện như chúng tôi, hãy tham gia vào cuộc trò chuyện và giúp định hình tương lai của Gland.
- Star repo trên GitHub: github.com/glandjs/gland
- Tham gia cộng đồng Discord của chúng tôi: Discord Server
- Đóng góp tài liệu, adapters hoặc ví dụ: Ý tưởng và PR của bạn luôn được chào đón!
- Xem tài liệu đang phát triển: github.com/glandjs/docs
Xin lưu ý rằng tài liệu chính thức vẫn đang được xây dựng, nhưng chúng tôi đang tìm kiếm một cấu trúc tốt và sẽ sớm hoàn thiện nội dung chi tiết.
Chúng tôi rất mong nhận được phản hồi chi tiết của bạn về những thay đổi này và sẵn sàng thảo luận cách chúng ta có thể cùng nhau cải thiện Gland. Hãy bắt đầu cuộc trò chuyện – suy nghĩ của bạn về hướng đi mới này là gì? Bạn đã từng gặp phải những thách thức hoặc cơ hội thú vị nào trong thiết kế hướng sự kiện mà bạn muốn chia sẻ?