发布于 2026-01-06 2 阅读
0

新的 Web 框架

新的 Web 框架

大家好!

我仍在努力开发Gland,经过大量的重构研发,我很高兴与大家分享一些新的进展。Gland 的语法越来越接近最终版本,我决定将其完全基于事件驱动(EDS),灵感来源于NestJSAngular等框架。

它的意思是:

  • 依赖注入系统:类似于 NestJS,方便依赖注入。
  • 控制器、导入、导出:与 NestJS 类似,但有所不同——通道取代了传统的提供程序。
  • 使用通道而非提供者:通道处理逻辑,使您的应用更具模块化和可扩展性。
  • 纯粹轻量级:从零开始构建,依赖项最少,没有不必要的软件包——一切都保持精简高效。

为什么选择事件驱动系统(EDS)?

Gland 的所有操作都由事件驱动,而不是直接从控制器返回数据。这使得应用程序更加模块化、可扩展和灵活。事件触发操作和响应,使整个流程更加流畅和直观。

例子:

@Controller('users')
class UserController {
  @Get('/:id')
  getUser(ctx: Context) {
    const result = ctx.emit('read:server', ctx);
    try {
      throw Error('Hello world');
    } catch (error) {
      return ctx.emit('read:server:error', { error, result });
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

这里,ctx.emit('read:server', ctx)发送一个名为 的事件users:read:server,并且一个 Channel 会监听该事件:

@Channel('users')
class UserChannel {
  @On('read:server')
  get(ctx: Context) {
    return 10;
  }
}
Enter fullscreen mode Exit fullscreen mode

现在整个数据流都是事件驱动的。

接下来是什么?

目前,Gland 仍在开发中,其理念也在不断发展。核心概念正在逐步实现,我也在探索如何让事件驱动架构更符合 Web 开发的直觉。

欢迎投稿或分享您的想法!

Gland 项目目前仍在积极开发中,其理念仍在不断完善。如果您支持本项目,欢迎在GitHub上点赞、提交 issue、提交 pull request 或分享您的想法。无论您是发现了 bug 还是有新的功能建议,您的反馈都弥足珍贵。

我很想听听大家的想法——与传统模式相比,这种事件驱动的方法是否更灵活、更模块化?或者您认为它存在哪些潜在挑战?让我们开始讨论吧!

文章来源:https://dev.to/m__mdy__m/new-web-framework-42f5