Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eggjs 学习与源码分析 #7

Open
totoSalad opened this issue Dec 21, 2019 · 0 comments
Open

eggjs 学习与源码分析 #7

totoSalad opened this issue Dec 21, 2019 · 0 comments
Labels

Comments

@totoSalad
Copy link
Owner

totoSalad commented Dec 21, 2019

eggjs

特色

约定优于配置

重要,但是大多公司封装的脚手架基本也都有相似的约定。相比而言 BFF(backend for frontend) 更具有特色

BFF

BFF 主要解决的矛盾:服务层面向通用接口编程 API 相对稳定,但是 client 端更偏向于体验, API 经常变化。
image

controller 与service

因为 BFF 的概念,egg 引入了 controller / service 的概念。

Service 是在复杂业务场景下用于做业务逻辑封装的一个抽象层,提供这个抽象有以下几个好处:

  1. 保持 Controller 中的逻辑更加简洁。
  2. 保持业务逻辑的独立性,抽象出来的 Service 可以被多个 Controller 重复调用。

我前司的脚手架也有 controller / service,但是因为以下理由:

  1. 服务端基本只做了只做了后端转发的操作
  2. 前后端接口是1对1的,很少出现复用
  3. 没有很好贯彻 BFF 的理念,后端面向前端开发

最终我们在 router 中直接把接口 proxy 到后端,实现了效率的大大提升。
说不出孰优孰略,只能说基于场景吧。

loader 机制

多个中间件的配置可能出现冲突

插件机制

通过插件实现脚手架核心功能:进程管理、日志、安全、跨语言RPC、故障排除 AliNode

image

框架定制

egg.js 把 app 启动/ 中间件加载 隐藏,egg-binwebpack 编译babel 编译等细节隐藏。让用户关注点集中在插件、配置、与业务代码。
egg 团队觉得这样还不够,他们引入了框架的概念,建议各事业部以egg.js为底层框架。把大量配置与插件都集成到框架中,便于统⼀团队的开发模式,⼀致的开发体验,⼀次性学习成本。
代码如下:
image

整体架构

image

关键代码分析

loader

https://github.com/eggjs/egg-core/blob/94b221b4d8/test/fixtures/egg/index.js

插件体系

资料

Egg & Node.js 从小工坊走向企业级开发

@totoSalad totoSalad changed the title eggjs 学习与 eggjs 学习与源码分析 Dec 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant