Midway基于 IoC 的 Web 全棧開發(fā)框架
Midway 是一個(gè)適用于構(gòu)建 Serverless 服務(wù),傳統(tǒng)應(yīng)用、微服務(wù),小程序后端的 Node.js 框架。
Midway 可以使用 Koa,Express 或 Egg.js 作為基礎(chǔ) Web 框架。它還提供了獨(dú)立使用的基本解決方案,例如 Socket.io,GRPC,Dubbo.js 和 RabbitMQ 等。
此外,Midway 也適用于前端/全棧開發(fā)人員的 Node.js 無(wú)服務(wù)器框架。構(gòu)建下一個(gè)十年的應(yīng)用程序。可在 AWS,阿里云,騰訊云和傳統(tǒng) VM /容器上運(yùn)行。與 React 和 Vue 輕松集成。
Midway 的一些特性。
- 全功能:支持 Web 應(yīng)用/Serverless/FaaS/微服務(wù)/小程序后端等多種場(chǎng)景,基于裝飾器和依賴注入開發(fā)企業(yè)級(jí)應(yīng)用
- 前端集成:全新的云端一體應(yīng)用研發(fā)體驗(yàn),零 API 調(diào)用,使用 "React Hooks " 風(fēng)格一體研發(fā)
- 跨平臺(tái):支持部署至普通 Server 或 Serverless/FaaS 環(huán)境
- 擴(kuò)展:組件化擴(kuò)展能力,另外支持使用 Koa/Express/Egg.js 生態(tài)插件
- 示例: 官方提供多種場(chǎng)景的示例代碼,方便開發(fā)者快速上手
- TypeScript 全面支持
創(chuàng)建新應(yīng)用
使用 midway-init 工具自動(dòng)創(chuàng)建 midway 應(yīng)用的目錄結(jié)構(gòu):
$ npm i midway-init -g $ midway-init
目前只有一個(gè) ts 的腳手架,可以直接使用。
通過(guò)生成的 npm scripts 來(lái)驅(qū)動(dòng)啟動(dòng)命令:
$ npm install $ npm run dev
快速開發(fā)引導(dǎo)
想要快速上手 midway,除了需要了解一些基礎(chǔ)的東西:
-
雖然可以直接用 js 的語(yǔ)法書寫,但是你最好了解 Typescript,這里有個(gè) 快速介紹。
-
盡可能使用面向?qū)ο蟮乃枷雭?lái)編碼,它的經(jīng)久不衰是有道理的,使用 class 機(jī)制能夠方便的融入我們的新特性。
-
了解 midway 的依賴注入體系,以及常用的裝飾器,這里做了 依賴注入的介紹。
-
如果你在 midway 的文檔中沒(méi)有找到你想要的東西,記住可以去 Egg 的文檔找找,或者 向我們提 Issue。
代碼風(fēng)格
我們將依賴注入引入到了復(fù)雜業(yè)務(wù)中,經(jīng)過(guò)各種裝飾器的包裝,業(yè)務(wù)的同學(xué)們可以更加專注的在業(yè)務(wù)領(lǐng)域,而不用關(guān)心依賴的實(shí)例化,初始化。
簡(jiǎn)單的例子。
@provide()
@controller()
export class HomeController {
@inject()
reportService: IReportService;
@get('/')
async index(ctx) {
ctx.body = await this.reportService.getReport();
}
}
@provide()
class ReportService implements IReportService {
@inject()
reporter: IReportManager;
async getReport(id: number) {
return await this.reporter.get(id);
}
}
上邊的代碼中我們展示了兩個(gè) class,HomeController 依賴了 ReportService ,很常見的寫法,可以看到其中沒(méi)有任何實(shí)例化或者初始化的跡象,業(yè)務(wù)代碼也如同普通調(diào)用的那樣直接,這都?xì)w功于依賴注入的魔法。
經(jīng)過(guò)裝飾器的修飾,形成了多個(gè)類,但是又不會(huì)相互耦合的局面,讓獨(dú)立開發(fā),測(cè)試都非常的方便。
除了以上的裝飾器,我們還開發(fā)了 @schedule @init @plugin 等好用的裝飾器。
