Malagu 框架可以开发前端、后端和其他类型应用(比如没有监听任何端口,比如命令行应用)。不管什么样的应用,都会存在一些共性的地方。Malagu 框架抽象了一个应用程序接口 Application 。这个接口足够简单,只有一个 start 方法,用来启动应用。不同类型的应用的启动方式可能不同。比如前端应用在启动时,前端 Dom 对象会挂载到 Document 上。
// 应用程序接口export interface Application {start(): Promise<void>;}
应用生命周期
应用启动的过程中,会触发不同阶段的生命周期方法的执行。ApplicationLifecycle 接口主要是应用生命周期的抽象。当您需要监听应用生命周期的某个阶段时,您可以通过实现 ApplicationLifecycle 全部或部分接口,并以 id 为 ApplicationLifecycle 注入到 IoC 容器即可。例如,我们在应用启动的时候初始化数据库连接池就可以实现该接口。
export interface ApplicationLifecycle<T extends Application> {initialize?(): void;onStart?(app: T): MaybePromise<void>;onStop?(app: T): void;}
独立启动应用
Malagu 框架通过命令行工具,外加框架本身的渐进式能力,使我们不用关心框架底层是如何启动的,框架会根据组件依赖情况,自动加载模块,并采用适合的方式启动应用程序,我们只需要使用 malagu serve 命令即可。在一些特殊的情况下,我们也可以独立启动应用。独立启动应用大体分为两步:
- 加载模块,构建 IoC 容器
- 获取应用程序对象,并启动应用
import 'reflect-metadata';import { Container } from 'inversify';import { CoreBackendModule } from '@malagu/core/lib/node/module';import { Application } from '@malagu/core';import { OtherModule } from '../module';(async () => {const container = new Container();container.load(CoreBackendModule, OtherModule); // 加载模块,构建 IoC 容器const application = container.get<Application>(Application); // 获取应用程序对象,并启动应用await application.start();})();
