Skip to content

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

@wengeezhang

Description

@wengeezhang

一.背景

目前启动上层框架(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
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions