-
Notifications
You must be signed in to change notification settings - Fork 16
Open
Description
一.背景
目前启动上层框架(application-http、application-rpc)是通过底层(artusApplication)emit 一个事件来完成的。
这就意味着上层框架需要在lifecycle中注册对于的hook,来完成进程的启动,流程如下:
二.问题
hook的定义(wiki)是:通过劫持来完成主逻辑的“增强或者调整”。
而当前的设计流程,其实是把hook的逻辑,作为了启动主流程的关键一步,没有这个hook,主流程走不下去。
后续带来的问题如下:
- 没有lifecycle.ts,进程无法启动;新人对于启动主流程的梳理很困惑
- 对于进程启动的抽象和封装,局限在lifecycle中,不是太灵活。
三.调整
经过和梓恒、胜凯的讨论,一个可能的解决方案是:
- 再设置一个装饰器,叫@AppBootStrap(暂定),用来装饰启动的class
- 底层处理完所有动作(load)后,通过container.get({set: 'AppBootStrap'})获取启动class,然后调用class的run方法启动进程
这样,用户可以用@AppBootStrap来定义一个class,专门负责启动逻辑。
伪代码如下:
// XApplication.ts
class XApplication{
start(){
// step1:
artusApp.load(manifest)
// step2:
const busiBootStraps = container.get({set: 'AppBootStrap'});
busiBootStraps.forEach(one => one.run())// 这里上层框架完成路由、中间件、listen
}
}
// 上层框架
@AppBootStrap
class HttpBootStrap{
run(){
// 注册路由、listen
}
}
@AppBootStrap
class RpcBootStrap{
run(){
// 注册路由、listen
}
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
