elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析

367 阅读2分钟

最近在跟着哲玄大佬从零开始做一个企业级的全栈应用框架,正好借此契机研究「web 服务引擎架构设计」。 之前简单接触过egg.js, 但一直没深入了解。刚好 elpis 和 egg 是很类似的。

整体的设计思路

elpis core 是基于 koa 构建出一个框架,本质上是对使用者屏蔽 koa 更底层的使用方法/实现。提供类似 egg js 的约定优于配置的开发方式的能力。 众所周知,一个服务器起码是可以分为,接入层,业务层和服务层的。对于 elpis 也是同样如此:

image.png

那么这些各层的逻辑无论是拆分成一个个的小文件亦或者是统一放在一个大文件中,最终都是需要挂载在 Koa的实例,或者被 Koa 的实例通过 use 方法以此运行在Koa实例跑起来的服务端的程序上的。

组织管理这些逻辑的方法有很多种,但基于团队协作及后续的可维护性的角度出发。类似 eggjs 的约定优于配置的开发方式的能力,看起来是更合适的管理方法。

这种方法会对项目的结构有一定要求:

image.png

相同种类的功能代码逻辑文件都会放在同一个对应的目录下。 好的,基于上面的这个项目结构 elpis core 需要做的事情就是将这些分别在各个目录下的配置或者是代码逻辑都挂载到 Koa 的 app 实例上或者是被实例通过 use 方法使用。 显而易见的是每个特定的目录下,都是同一类的配置/代码逻辑,那么其对应的引入到 koa 中的方式也是类似的。这也就决定了 elpis core 的加载能力的支持能力是落在了一类相似的配置/代码逻辑 的这个粒度。 参考 webpack 中的loader能力,elpis core 所做的事情也很类似,所以在 elpis core 中我们也会开发一系列的 loader 用于将 文件系统 中的配置/代码逻辑文件挂载到 Koa 的 app 实例上,并随着 app 实例的启动运行,一起运行在内存中。

image.png

elpis core中的加载器主要会有如下这些:

  • configLoader: 配置加载器
  • extendLoader: 扩展功能加载器
  • middlewareLoader: 中间件加载器
  • serviceLoader: 服务加载器
  • controllerLoader: 控制器加载器
  • routerSchemaLoader: 路由模式加载器
  • routerLoader: 路由加载器

引用: 抖音“哲玄前端”《大前端全栈实践》