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

上层框架的启动方式建议 #74

Open
wengeezhang opened this issue May 17, 2022 · 1 comment
Open

上层框架的启动方式建议 #74

wengeezhang opened this issue May 17, 2022 · 1 comment

Comments

@wengeezhang
Copy link
Collaborator

一.背景

目前启动上层框架(application-http、application-rpc)是通过底层(artusApplication)emit 一个事件来完成的。

这就意味着上层框架需要在lifecycle中注册对于的hook,来完成进程的启动,流程如下:

image

二.问题

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
  }
}
@DevXiaolan
Copy link
Contributor

感觉上这个调整也还可以,虽然只是语义上更清晰了,本质上和 hook 的机理差不多?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants