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