<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Midway基于 IoC 的 Web 全棧開發(fā)框架

          聯(lián)合創(chuàng)作 · 2023-09-20 04:03

          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 等好用的裝飾器。

          瀏覽 31
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美老妇乱伦视频 | 欧美日韩丁香五月天色网 | 亚洲一级在线免费视频 | 狠狠搞视频 | 国产三级电影网站 |