Nodejs 阿里 Midway 解决了什么问题?
Nodejs 阿里 Midway 解决了什么问题?
前段时间发现了阿里的 Midway 框架,当时看的云里雾里,感觉他好像就是一个服务端框架罢了,类似于 laravel 、spring
官网介绍说这是一个 serverless 框架,可以直接部署在 serverless ,无惧被云服务商绑定,但是像 laravel 、spring 等不也可以直接部署吗,也不怕被服务商绑定啊
前天又看到了 Taobao UED 的 《前后端分离的思考与实践》 https://www.w3cschool.cn/jdgasx/,文章中说,这样设计框架的目的,好像就是为了把 controller 的责任移到了前端,前端去负责控制器、视图,后端负责数据和业务处理,说好处是可以职责划分。是在本身的业务层中间又插一层 node ,职责划分更明确了,但是前后端的沟通成本 /开发成本会不会更高?
发现这个框架也可以直接操作数据库,也可以用 Midway Hooks 的方式结合 vue 和 react ,目前感觉的好处就是,写页面不用在绑定接口了,中间的数据传递都让框架本身处理了。但是这样搞,和传统 laravel 、springMVC 不也一样吗~只不过一个服务端渲染,一个本地渲染
目前我能想到的更深一步的好处是,可以基于 react 的函数式编程,实现千人千面的效果。但是这样对 app 、pc 的应用好像没有效果。而且徒增一层 node ,感觉深知有点多余呢……
我前公司的做法是:
后端:负责数据和业务逻辑,对外提供细粒度的 dubbo 接口
中间层:根据前端需要,调用不同的接口并拼接数据,对外提供 http 接口,同时负责页面的服务端渲染
前端:负责多端视图和样式处理
因为中间层主要服务于前端,所以使用 node.js 开发,由前端维护。至于你说的前后端沟通成本,我们是通过规范化的接口文档来约束。
上面说的主要是回复你关于前后端分离的实践,而 Midway 框架本身我没怎么接触过,只能理解为它是 node.js mvc 框架的一种,具体优缺点楼下各位大佬回答
解决了 KPI 不足的问题。
serverless 包层 kpi 的皮而已。用处还挺多的,比如晋升、开会,以及宣传自家开源贡献等等
6 啊,kpi 项目~
就一个 node 框架而已
谁没被 weex 坑过
国内企业里,阿里的开源项目是最多的,但同时烂尾项目也是最多的,这些项目了解了解思路学一下就可以,真正要用到生产上的话得充分考察一下。
任何架构都是有适用场景和不适用场景的,比如加一层 BFF 可以让后端专注于资源和核心业务,前端可以更灵活地实现表层业务,如果后端只服务于这一个前端的话,加一层确实意义不大,因为 BFF 的工作后端也可以做,但如果后端是被很多业务团队的前端共用的,加一层就可以让后端仅提供通用 API ,细节让前端根据自己的业务特点自己在 BFF 层定义,从而有可能可以节省开发成本。
很多东西的存在不是为了完全替代其他方案的,而是在某些情况下比其他方案更适合,比如一个项目需要加一个 BFF 层来节省开发成本,而且 BFF 层要让前端团队去负责,那么让精通 JS 的前端在写 BFF 的时候肯定也是首选同样用 JS 的 Node.js 技术栈,再让前端去学 PHP 、Java 成本就太高了。
你觉得多余,是因为你目前的项目场景不适合这个方案,不一定代表这个方案在任何场景都多余。
有道理,大佬牛逼
赞同 的看法,阿里的 JS 项目我用过的,唯二好用的,只剩下了 Antd 和 ahooks 。别的都烂尾的挺严重的,学学思路就好。随意上生产环境可能会死的很惨。
Midway是阿里巴巴淘宝前端架构团队基于渐进式理念研发的Node.js框架,它主要解决了以下几方面的问题:
-
高效开发和维护:
- 通过自研的依赖注入容器和面向对象的设计,Midway能自动管理模块间的依赖关系,使代码更加模块化和可维护。
- 支持TypeScript,提供更好的类型检查和代码提示,减少错误和调试时间。
-
丰富的组件和扩展能力:
- 提供丰富的内置组件,如数据库、缓存、定时任务等,满足多种开发需求。
- 插件化架构方便添加和移除功能,扩展应用程序的特性和能力。
-
一体化研发体验:
- Midway不仅支持传统的Web应用开发,还适用于Serverless、微服务、小程序后端等多种场景。
- 提供一体化调用方案,方便前端页面协同开发,提升开发效率。
-
跨平台部署:
- Midway应用可部署在多种云平台上,如阿里云、腾讯云、AWS等,提供了灵活的部署选项。
以下是一个简单的Midway应用示例,展示了如何使用装饰器和依赖注入来创建一个天气信息查询的API:
import { Controller, Get, Query, Provide, Inject } from '@midwayjs/core';
@Provide()
class WeatherService {
async getWeather(@Query('cityId') cityId: string) {
// 实现天气查询逻辑
}
}
@Controller('/')
class WeatherController {
@Inject()
weatherService: WeatherService;
@Get('/weather')
async getWeatherInfo() {
return this.weatherService.getWeather();
}
}
综上所述,Midway为Node.js开发提供了高效、稳定和可扩展的解决方案。