新的 Web 框架
大家好!
我仍在努力开发Gland,经过大量的重构和研发,我很高兴与大家分享一些新的进展。Gland 的语法越来越接近最终版本,我决定将其完全基于事件驱动(EDS),灵感来源于NestJS和Angular等框架。
它的意思是:
- 依赖注入系统:类似于 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 });
}
}
}
这里,ctx.emit('read:server', ctx)发送一个名为 的事件users:read:server,并且一个 Channel 会监听该事件:
@Channel('users')
class UserChannel {
@On('read:server')
get(ctx: Context) {
return 10;
}
}
现在整个数据流都是事件驱动的。
接下来是什么?
目前,Gland 仍在开发中,其理念也在不断发展。核心概念正在逐步实现,我也在探索如何让事件驱动架构更符合 Web 开发的直觉。
欢迎投稿或分享您的想法!
Gland 项目目前仍在积极开发中,其理念仍在不断完善。如果您支持本项目,欢迎在GitHub上点赞、提交 issue、提交 pull request 或分享您的想法。无论您是发现了 bug 还是有新的功能建议,您的反馈都弥足珍贵。
我很想听听大家的想法——与传统模式相比,这种事件驱动的方法是否更灵活、更模块化?或者您认为它存在哪些潜在挑战?让我们开始讨论吧!
文章来源:https://dev.to/m__mdy__m/new-web-framework-42f5