萝卜墩儿

桌面应用开发漫谈

桌面应用开发漫谈

不得不承认,当今已经是web时代,移动互联网时代,PC的桌面应用开发大部分也只能局限在行业/领域应用软件了。
不过,生产力、效率提升、工具类的桌面应用依然是我们日常最得力的助手。
作为一个业余Geek,有自己动手开发桌面工具情结,我倒是在桌面应用开发上“浪费”过一些精力,现将自己的经验做些总结,希望对也想入坑的小伙伴提供点参考。

web盛行的今天,桌面应用开发还有什么意义

都0202年了还谈桌面应用?

说实话意义确实不大,以下是几种可能的意义

  • 找回最初的编程动机,毕竟在学编程之前,很多人对编程的理解都是开发个“软件”
  • 将常用小脚本界面化,写插件
  • 服务于web开发,让web开发更爽
  • 在业余精力不多的情况下获得成就感
  • 接地气

Web开发者鄙视桌面应用开发者?

不一定,桌面开发所需要具备的技术能力和难度不一定比web开发差,换句话说让web开发者开发桌面应用未必you can up

桌面开发效率低?

不尽然,不过受web生态发展迅速的影响,会有一些组件和框架的差距

有没有学习成本不高,上手较快的快速实践办法?

熟悉前端的可以考虑electron,
习惯Java的可以用一些GUI辅助工具,比如IntelliJ自带的GUI Designer实现拖动组件快速构建界面

尽量和现有Web开发习惯相似?

electron
Electron | 使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用

桌面开发应该是前端的工作吗?

按理说是应该这样,不过现在除了使用前端语言的包壳做法以外,其他的UI组件和逻辑代码还是没有很好的解耦

常见桌面应用分析

IM(微信/咚咚)
Mail(outlook等)
IDE(IntelliJ/WebStorm/VSCode/PyCharm……)
浏览器(chrome/Firefox/opera……)
办公套装(MSOffice/WPS/Adobe系列/PDF查看批注……)
本地工具( Navicat/SwitchHost/Typora/Postman )
笔记思绪( OneNote/Xmind/各种TodoList…… )
媒体播放( 网易云音乐/qq音乐…… )
生产/工业控制(CAD,各种车间操作台…… )
PC游戏(绝地求生、孤岛危机、极品飞车……)

桌面应用开发常见技术/框架/GUI库

框架/类库 语言/开发环境 适用平台 案例
Qt(C++图形用户界面应用程序开发框架) C/C++ 跨平台 WPS/极品飞车/AutoDesk/VLC……
WPF(微软用户界面框架) .NET/C#/VB等 Windows 前后台分离(XAML、矢量图)应用广泛
WinForm .NET/C# Windows 早期QQ
MFC(微软类库) C/C++ Windows 绘图/工业控制等
Swing/JavaFx/SWT Java 跨平台 IntelliJ IDEA/eclipse
NW.js(node-webkit) HTML/CSS/JS 跨平台 微信桌面版
Electron HTML/CSS/JS 跨平台 VSCode/Typro/Postman/Skype/WhatsApp/Slack……

桌面应用常见需求

  • 工具属性
  • 本地计算/本地数据
  • 本地软硬件接口/打印机扫描仪
  • 快速响应/无网络运行
  • WebView

Java桌面应用开发

--我们最容易上手,语言最熟悉
优点:

  • Java语言易上手
  • 丰富的后端maven库
  • 跨平台

缺点:

  • 启动稍慢
  • UI相关基础建设差,矢量图形支持差
  • 不支持webview

实例:
intellij-community
wechat_desktop
MooTool

--后面我会单独写一篇详细介绍如何不想投入太多学习成本,基于IntelliJ快速实现Swing界面
以及LookAndFeel、和spring结合、JavaFX、SWT、JNI等

Electron桌面应用开发

--当下最流行,UI表现力最强,优点最多
优点:

  • 开源
  • Web前端开发语言
  • 丰富完善的UI基础建设,海量视觉,可胜任复杂交互和组件
  • Chrome内核,WebView无压力
  • 跨平台

缺点:

  • 启动稍慢
  • 内存占用大
  • 对于后端同学需要充值前端能力

实例:
wewe-chat
https://electronjs.org/apps

相比于Web,桌面应用开发需要额外考虑的

  • 用户本地数据存储
  • 应用本地配置
  • 系统文件权限
  • 系统托盘
  • 剪贴板操作
  • 系统软(环境变量)硬件(处理器内存显卡显示器分辨率等)环境
  • 注册表、可执行文件、安装包制作
  • 卸载清理处理,桌面应用道德规范
  • 版本迭代,强制更新考虑
  • 平滑升级
  • 基础建设(撤销/重做,滚动条等)
  • 布局,icon,lancher,圆角等等