天天看點

一個面向未來的雲端一體Node.js架構——Midway

作者:GitHub精選
《開源精選》是我們分享Github、Gitee等開源社群中優質項目的欄目,包括技術、學習、實用與各種有趣的内容。本期推薦的是一個基于漸進式理念研發的 Node.js 架構——Midway。
一個面向未來的雲端一體Node.js架構——Midway

Midway 是阿裡巴巴 - 淘寶前端架構團隊,基于漸進式理念研發的 Node.js 架構,通過自研的依賴注入容器,搭配各種上層子產品,組合出适用于不同場景的解決方案。

Midway 基于 TypeScript 開發,結合了面向對象(OOP + Class + IoC)與函數式(FP + Function + Hooks)兩種程式設計範式,并在此之上支援了 Web / 全棧 / 微服務 / RPC / Socket / Serverless 等多種場景,緻力于為使用者提供簡單、易用、可靠的 Node.js 服務端研發體驗。

特性

  • 全功能:支援 Web 應用/Serverless/FaaS/微服務/小程式後端等多種場景,基于裝飾器和依賴注入開發企業級應用
  • 前端內建:全新的雲端一體應用研發體驗,零 API 調用,使用 "React Hooks " 風格一體研發
  • 跨平台:支援部署至普通 Server 或 Serverless/FaaS 環境
  • 擴充:元件化擴充能力,另外支援使用 Koa/Express/Egg.js 生态插件
  • 示例:官方提供多種場景的示例代碼,友善開發者快速上手
  • 語言:TypeScript 全面支援

為什麼要有 Midway

社群上也有很多類似的架構,那為什麼還需要 Midway ?

原因有三點:

  1. Midway 是阿裡内部一直持續在研發的架構,之前 egg 是作為底層架構,需要有面向應用層面的架構來和集團場景對接
  2. 全量使用 TypeScript 是未來一段時間的趨勢,面向未來去疊代和研發是作為架構組創新的要求
  3. 雖然社群已經有 nest 這樣的架構,但是這些産品的維護、協作、修改都會受到商業化産品的制約,也無法做到需求的快速疊代和安全性保障,整體的研發理念也和我們不同,為此,我們需要有一套自研的架構體系
一個面向未來的雲端一體Node.js架構——Midway

多程式設計範式

Midway 支援面向對象與函數式兩種程式設計範式,你可以根據實際研發的需要,選擇不同的程式設計範式來開發應用。

  • 面向對象(OOP + Class + IoC)

Midway 支援面向對象的程式設計範式,為應用提供更優雅的架構。

下面是基于面向對象,開發路由的示例:

// src/controller/home.ts
import { Controller, Get } from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';

@Controller('/')
export class HomeController {

  @Inject()
  ctx: Context

  @Get('/')
  async home() {
    return {
      message: 'Hello Midwayjs!',
      query: this.ctx.ip
    }
  }
}           
  • 函數式(FP + Function + Hooks)

Midway 也支援函數式的程式設計範式,為應用提供更高的研發效率。

下面是基于函數式,開發路由接口的示例:

// src/api/index.ts

import { useContext } from '@midwayjs/hooks'
import { Context } from '@midwayjs/koa';

export default async function home () {
  const ctx = useContext<Context>()

  return {
    message: 'Hello Midwayjs!',
    query: ctx.ip
  }
}           

應用案例

  • Cool-Admin - 一個很酷的背景權限管理架構
一個面向未來的雲端一體Node.js架構——Midway
  • VSC Plugin
一個面向未來的雲端一體Node.js架構——Midway

—END—

開源協定:MIT

開源位址:https://github.com/midwayjs/midway

繼續閱讀