Midway 一体化 2,跟Java初学者分享几点经验

如下图所示,使用第三方的 Hooks 包,加速开发。(图中的包为示例代码,实际并不存在)

  • 极速启动

在 1.0 版中,服务启动时存在大量的编译工作,因此新项目首次启动时间 > 10 秒,并随着后端文件的增加,编译时间也会变长,从而导致了项目越大,开发速度越慢的问题。

1.0 启动流程

而在 2.0 版本中,得益于纯运行时方案,新项目启动与重启时间 < 2 秒,且文件数量的增长并不会影响启动时间。在大型项目中将有效减少等待时间。

同时,由于不再需要编译器,2.0 版本在运行时也不会产生 .faas_debug_tmp 此类的缓存文件夹,项目目录更加整洁。

  单元测试

单元测试是 Midway Hooks 在函数式支持上的一块重要拼图。我们希望你能轻松愉悦的完成应用的测试,就像测试纯函数那么简单。

在新版本中,我们支持 runFunction 与 request 两种测试方式,帮助你快速完成接口的测试。

接口代码

export async function get () {

return { type: ‘GET’ }

}

export async function post (message: string) {

return { type: ‘POST’, message }

}

使用 runFunction 测试

import { createApp } from ‘@midwayjs/hooks-testing-library’;

import { get, post } from ‘./api’

it(‘GET’, async () => {

const app = await createApp();

expect(

await app.runFunction(get);

).toEqual({ type: ‘GET’ });

expect(

await app.runFunction(post, ‘2.0’);

).toEqual({ type: ‘POST’, message: ‘2.0’ });

});

使用 request 执行完整的 HTTP 测试

import { createApp } from ‘@midwayjs/hooks-testing-library’;

import { get, post } from ‘./api’

it(‘GET’, async () => {

const app = await createApp();

const response = await app.request(get)

expect(response.status).toEqual(200)

expect(response.type).toEqual(‘application/json’)

const postResponse = await app.request(post, ‘2.0’)

expect(postResponse.status).toEqual(200)

expect(postResponse.type).toEqual(‘application/json’)

});

对比与传统 Web 应用的测试,你无需关心单元测试的路径、入参、类型提示等。就像测试纯函数一样测试接口。

传统 Web 应用的测试

  插件化与函数式配置

在 1.0 中,我们通过 faas-cli 的插件来为项目启用一体化功能。Midway Hooks 与项目是高度定制化且绑定的。

而在 2.0 中,我们将 Midway Hooks 变为了 Midway 的 Component,你可以在任何 Midway 新版本中,启用 Hooks 功能,而不受项目类型,部署模式的限制。

这也意味着,你不仅可以在一体化项目中使用 Hooks,也可以在纯接口开发或 Midway Web 应用开发时使用 Midway Hooks。

新版本的启用方式

import { hooks, createConfiguration } from ‘@midwayjs/hooks’;

export default createConfiguration({

imports: [hooks()]

});

同时我们也支持了 createConfiguration,支持以函数的方式创建 Midway Configuration,减少 Class 与函数式混用所带来的迷惑感。

  Hook 中间件

在 1.0 版本中,我们对单函数中间件做了支持,但中间件依然遵照 Koa 中间件的语法,也无法在内部使用 Hooks,会给使用者带来困扰。

而在 2.0 版本中,我们新增了 Hooks 中间件的支持,同时也支持了全局中间件与文件级中间件。

原有 1.0 版本的单函数中间件依然保持兼容,你可以手动重构从而使用新的语法。

  • 语法

中间件仅有 next 一个参数,ctx 需要通过 useContext 获得。你也可以在中间件中使用任意的 Hooks。

Logger 中间件

import { Context } from ‘@midwayjs/faas’;

import { useContext } from ‘@midwayjs/hooks’;

const logger = async (next: any) => {

const ctx = useContext();

console.log(<-- [${ctx.method}] ${ctx.url});

const start = Date.now();

await next();

const cost = Date.now() - start;

console.log([${ctx.method}] ${ctx.url} ${cost}ms);

};

在 2.0 版本中,Midway Hooks 支持三种形式的中间件,用来覆盖不同的使用诉求。

  1. 2.0 全局,对所有 Api 调用都生效

  2. 2.0 文件,对文件内部所有 Api 生效

  3. 1.0 函数,仅对该 Api 函数生效

  • 全局中间件

全局中间件在 configuration.ts 中定义,可以传入任何框架支持的中间件

import { hooks, createConfiguration } from ‘@midwayjs/hooks’;

import logger from ‘./logger’;

// Global Middleware

export default createConfiguration({

imports: [

hooks({

middleware: [logger],

}),

],

});

  • 文件级中间件

文件级中间件在 Api 文件中定义,通过导出 config.middleware,使得其对该文件内所有 Api 函数生效。

import { ApiConfig } from ‘@midwayjs/hooks’;

import logger from ‘./logger’;

// File Level Middleware

export const config: ApiConfig = {

middleware: [logger],

};

export default async (message: string) => {

return { type: ‘POST’, message }

};

  新配置文件项目配置

在 2.0 版本中,我们开放了 Hooks 项目的配置,帮助用户来更好的开发代码。

  • 新配置文件

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

[外链图片转存中…(img-wAKLnwAQ-1711000453388)]

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

[外链图片转存中…(img-8lODCJBb-1711000453388)]

还有源码相关的阅读学习

[外链图片转存中…(img-PD4ARz5P-1711000453389)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值