文章
问答
冒泡
聊一聊各种场景下技术栈的选择
前言
经常有朋友找我沟通,我要搞一个什么东西,用什么技术方案比较好呢?每次都需要了解相关情况,回答的多了,干脆就梳理一下。也可以分享给别人一起交流。
 
首先,我们要明白,没有最好的方案,只有合适的方案,具体要怎么做,还是要结合自身团队的情况和项目的实际情况。
 
场景
我们先梳理下相关的场景,主要分为以下几大类
  • web服务端
  • 前端
  • 桌面应用
  • 小程序
  • 嵌入式
  • 上位机
  • 物联网
  • 大数据
 
 
web服务端
开发语言
框架
数据库
消息队列
文件存储
java
spring boot mvc
mysql,
postgresql,
sqlserver,
oracle
rabbitmq
minio
.net core
mvc
nodejs
nestjs
php
laravel
python
django
ruby
ruby on rails
web应用是我们平时接触比较多的场景,自从B/S架构出现以后,因为其客户访问只需要基于浏览器就可以访问系统,免去很多客户端部署的工作,以及客户端维护的麻烦,现在已经是管理系统的首选方案。
开发语言和框架:web应用的选择很多,基于业务性质,我们主要考虑成本以及可维护性。java 因为其一直以来的开源策略(虽然被oracle收购之后各种作妖,但是很多厂商都提供了opensdk),社区极其庞大,几乎你用到的各种功能都有开源组件可以支持。尤其是spring 全家桶的出现,让java web的开发难度直线降低,而国内由于之前互联网的蓬勃发展,java从业人员也是最多的,所以java + spring boot方案是目前的主流选择。微软现在也在拥抱开源,现在的.net core也开源了,但是总的来说比java还是有不小差距。至于其他的语言和框架主要看团队的选择,如果团队熟悉,一般来说问题不大。
数据库:至于数据库的选择,基本都是开源的mysql,现在postgresql 后来居上,用的也非常多。sqlserver 应该来说.net项目用的会多点吧。至于oracle 更多还是在一些比较愿意投入的项目上,毕竟挺贵的。
消息队列:消息队列虽然现在选择不少,不过一般来说rabbitmq 满足大部分场景了。其他的情况,酌情考虑。
文件存储:应该来说minio是最优选择
 
 
前端
框架
组件库
react
ant-design-react,
tdesign-react
vue
ant-design-vue,
tdesign-vue,element-ui
因为前端的技术演化,从最开始的前后端一体,到前后端分离,前端技术日新月异。从jquery时代的操作dom 到mvvm的数据渲染,更重要的是各种优秀组件库的产生,前端的生产力也是极大的提高了。一个优秀的组件库,可以让一个初级的前端人员也可以写出炫酷的页面。element-ui应该是比较早出现的vue组件库,当时感觉就很惊艳,添加依赖就可以使用。后来阿里推出了antd,已经成为了使用最多的react组件库,社区也提供了antd风格的vue和angular版本,到后来几乎看到的中后台系统都是antd风格。
框架选择: 其实Vue和React 基本差不多,但是国内Vue的开发人员比较多,而且看下来用react的一般是一些规模比较大的公司或者外企。这个就根据团队前端人员的技术栈自己选择就好。
组件库:目前用的比较多的是ant-design和element-ui,其实也可以关注下腾讯的tdesign。
 
网站
服务端语言
技术栈
nodejs
next.js(react),nuxt.js(vue)
php
 
这里的网站指的是偏门户的网站,业务逻辑不复杂
早年的时候网站建设基本都是php的天下,现在由于技术的发展,更建议使用nodejs体系,一种开发语言就可以搞定
 
桌面应用/上位机
框架
开发语言
操作系统
winform
C#
win
QT
C++
win/linux/mac
electron
Nodejs
win/linux/mac
tarui
Rust
win/linux/mac
flutter
Dart
win/linux/mac
winform: C#语言开发,解决方案比较完善,但是只能用在win系统上
QT: 跨平台,原生开发,开发成本较高,但是可以实现各种复杂功能。
electron: 与系统交互是nodejs,界面渲染基于chromium,可以使用前端方案开发界面
tarui: 与系统交互的语言是Rust,界面渲染是基于系统安装的webview2,可以使用前端方案开发界面
flutter: fultter在致力于跨平台,跨端方案,但是目前来至少在桌面端表现还不是很好。
如果考虑设备集成,建议还是QT稳妥
 
移动端
技术栈
原生开发
react-native
uni-app
flutter
移动端开发,非特殊情况建议使用跨平台方案 flutter>react-native>uni-app
 
小程序
技术栈
是否多端
原生开发
uni-app
taro
现在各大平台都是推出了自己的小程序,微信,QQ,支付宝,京东等,每个平台都有自己的实现方案,如果每个都去开发一套,那成本就太高了。uni-app,taro 都是多端解决方案,而且都支持react和Vue语法。个人建议外包项目uni-app,如果是自己的产品可以考虑taro。
 
嵌入式
嵌入式还是C++吧,没啥好选的。
 
 
物联网
语言
框架
协议通信
java
spring boot webflux,vert.x
mqtt
golang
 
nodejs
 
物联网技术方案与管理系统的技术栈基本类似,主要是与设备端通信方案的选择,建议使用mqtt。服务端尽量选择异步框架。
 
大数据
大数据基本没什么太多选择,主流的框架基本都是基于java的。
 
结语
以上是基于个人有限的了解,进行的简单梳理。至于具体怎么选择,主要还是看团队当前的技术栈,以及项目的实际情况。其实,大多数情况下,需求方不具备专业知识,老板也不具备工程背景,最终要求也只是能实现功能就行,完成交付即可。不太回去考虑维护成本,可扩展性等长期因素。当然,如果自己想有点要求的话,可以根据多个方面综合评估,选择自己合适方案。

关于作者

落雁沙
非典型码农
获得点赞
文章被阅读