協(xié)議無關(guān)的框架Gland:最新進展與未來規(guī)劃
嘿,大家好!
经过大量的研发,多次设计迭代和无数小时的实验,我非常兴奋地与大家分享Gland的一些大更新。最近几周,我一直在调整和优化框架的核心——现在可以说:
Gland 现在完全独立于协议,并且完全基于事件驱动。
受 NestJS 和 Angular 等架构的启发,Gland 将依赖注入和模块化的理念更进一步发展,并带有一种独特的转折,使其在众多框架中独树一帜。
在我的上一篇文章中,我介绍了Gland并谈到了它的事件驱动特性。当时,Gland已经轻量且简洁,并且几乎没有任何外部依赖。即便如此,它仍然紧密依赖于HTTP。
这一点现在有所改变。
最近有什么新鲜事?
协议无关性(即对特定协议的不依赖)
Gland 目前旅程中的一个重大里程碑:框架不再局限于 HTTP 协议。
@glandjs/core
包已经完全重新设计,以实现完全独立于任何传输层或协议——无论是 HTTP、WebSocket、RPC、MQTT 还是其他形式的通信协议。
介绍经纪插件
我引入了一个新概念,叫做Broker 适配器,它们充当您选择的协议与 Gland 事件系统之间的桥梁。想用 HTTP 吗?创建一个适配器就可以了。想用 WebSocket、Fastify 或 MQTT 吗?只需要为您的需求构建一个适配器即可。
目前,已有一个通过 @glandjs/express
为 Express插件 提供支持的工作适配器。接下来即将支持Fastify,然后是像WebSocket和MQTT这样的其他协议。
HTTP的抽象层
旧的 @glandjs/http
包已经被 拆分并进行了抽象化处理。它不再具体实现特定的 HTTP 服务器——而是提供装饰器和结构(例如 @Get()
、@Post()
等装饰器)。实际的服务器实现现在则是在 Express 或 Fastify 这样的特定协议适配器中进行的。
依旧是100%事件驱动 EDS 模式
Gland 仍然完全基于 事件驱动系统(EDS)。这意味着从控制器调用到内部逻辑,所有内容都是通过 事件 来处理的,而不是通过直接调用方法。这种架构使得框架非常模块化、可扩展和灵活。
这里有一个更新的、能正常工作的Express框架示例:
import { Controller, Module } from '@glandjs/common'
import { Get } from '@glandjs/http'
import { GlandFactory } from '@glandjs/core'
import { ExpressBroker, type ExpressContext } from '@glandjs/express'
@Controller('/')
class UserController {
@Get()
index(ctx: ExpressContext) {
ctx.res.send('Hello World')
}
}
@Module({
controllers: [UserController],
})
class AppModule {}
async function bootstrap() {
const app = await GlandFactory.create(AppModule)
const express = app.connectTo(ExpressBroker) // 完全类型安全,
express.listen(3000)
}
bootstrap()
全屏: 开启/关闭
有了这种配置,你可以通过插入相应的适配器,使用 Gland 与 任何协议 进行通信。现在可以使用 Express,接下来是 Fastify,然后是 WebSocket,等等——你需要的都行!
这对格兰的未来来说意味着什么呢?
Gland 目前在架构方面已经实现了大约 80% 的功能实现。剩下的工作集中在完善剩余的功能实现。
- 优化 APIs
- 稳定事件处理系统
- 完成与更多协议的集成
- 编写详尽的文档
核心支柱包括DI、模块化架构、协议无关性和基于事件的流程,现在已经非常稳固。是的,如果你的需求符合Gland的使用方式,你完全可以将它用于生产环境。目标是提供一套虽简约却强大的工具集,随你的需求不断发展。
接下来呢?
- Fastify支持 – 已经在开发中
- WebSocket适配器 – 计划在完成Fastify之后开发
- 文档+网站 – 正在用Astro和GitHub Pages搭建
- 测试和稳定 – 确保Gland在实际使用中更加稳定可靠
快来一起讨论和贡献吧!
我真的很激动这个Gland的新阶段,很想知道你的想法。
- 你觉得这种不依赖特定协议的方法有吸引力吗?
- 你认为在这种事件驱动的系统中会遇到哪些潜在的挑战?
- 你希望如何贡献,无论是编写代码、撰写文档还是提供反馈?
如果你和我对模块化、无协议的事件驱动架构一样热衷,请一起参与讨论,帮助定义 Gland 的未来。
- 给仓库点赞: github.com/glandjs/gland
- 加入我们的 Discord 社区: Discord Server
- 贡献文档、适配器或示例代码: 欢迎您的想法和提交的 PR!
- 查看我们正在编写的文档: github.com/glandjs/docs
文档还没有准备好,不过我正在寻找一个好的框架,之后我会开始构建文档并编写其内容。
我真的很希望能收到你对这些改动的详细意见,也很期待我们一起讨论怎样能让Gland更上一层楼。咱们聊聊吧——你觉得这个新方向怎么样?在做事件驱动设计时,你有没有遇到过什么有趣的挑战或机会,愿意分享一下吗?
共同學(xué)習,寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章