链接:https://www.zhihu.com/question/264999651/answer/741654058
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我大概开发Electron快两年的时间了,期间也做过一些产品。
首先我们看一下我们常用的客户端软件开发都有哪些技术:
首先是Microsoft阵营的
Winform
如雷贯耳,大多数人开发CS程序都是基于Winform去做的,它的有点在于简单、高效,但是它的缺点在于,如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样式表来讲,美化Winform的界面以及自定义控件是需要耗费更多的时间的。

并且,Winform由于其出身,原生是不可以运行在其他操作系统之上的,当然,我已经很久很久很久没有用过Winform了,所以对其现在的发展现状并不是很了解。
在开发上,Winforms简直不要太简单,如果对UI没有苛求的话,Visual Studio能够拖到你怀疑人生。
WPF
微软的又一个杀手锏,其基于XML+C#+CSS的呈现方式让它在UI上有了更加灵活的设计宽度,并且对大多数开发者来讲,前后端分离式的开发方式能够更好的组织代码逻辑,我是先学的Flex,后来才知道有WPF这么个东西存在,瞬间觉得非常亲切,不过其子集Silverlight却没有在WEB端发扬光大。

同样,WPF不能运行在其他操作系统,并且在XAML中编写样式表,通用性还是不如HTML强,从学习应用的范围来讲,还是HTML更好一些。
在开发上WPF前端X(A)ML、后台C#,与HTML+JS差不多,但是所学的知识点可能更偏向于.NET内部,也有可视化的编辑器,但是我之前用的时候手感比Winform的差太多了,不过熟练了之后基本上都是基于代码设计,倒也无所谓。
UWP
微软为了针对移动端市场开放的开发框架,我本人没有用过,所以不好做太多评价,但是从目前看来,有个老外说的好:UWP is dead because Windows apps are dead,有兴趣的同学可以去找找相关资料。

总而言之,如果你的APP只需要运行在Windows下,我认为WPF或者UWP是最好的选择,毕竟在调用系统原生API上微软的亲儿子们有着巨大的优势。
没有开发过,不做讨论。
然后是Java阵营
Swing
零几年学Java的老头子们几乎都是从Swing开始学起的,Swing谜一般的默认UI审美观让我直接放弃了继续学习下去的动力

不过我还是利用NetBeans和一个UI控件库开发出了一个比较漂亮的产品,给我的感觉就是这个家伙实在太重了,我也已经很久很久没有碰过Swing了,所以对于现在的Swing是个什么情况也不能详细介绍。
使用NetBeans能勉强达到Visual Studio拖拽控件十分之一的手感吧,其他的我没试过,对我来讲简直是一种灾难……
JavaFx
怎么说呢……说实话我是Java程序员,但是JavaFx出来的时候我根本还没来得及做任何反应,这个家伙就消失在了大众的视野中,也许是我孤陋寡闻,也许是圈子不同,我身边的开发朋友没有一个在用JavaFx。

他的优点在于可以跨平台,缺点在于整个生态环境非常不好,与Winforms一样,自定义一些控件相对比较困难。
接下来是Adobe阵营
Air
我开发过很长一段时间的Flex程序,当Air第一次出现在我眼前的时候,给了我眼前一亮的感觉,相对于Swing来讲,Air更漂亮,因为有很多Flash控件的积累,可选择的资源也会更多一些。
但是随着Flash在浏览器上的节节败退,Air也悄无声息的消失在了大众的视野当中。

它的优点在于可以跨平台,可以基于Flash做出很多超级炫酷的动画特效,但是缺点主要就是效率实在是太低下了,并且在调用操作系统原生API的时候也非常不方便。
开发方式就是硬编码,虽然有FlexBuilder可以使用,但是简直是一个灾难级别的存在……绝对怀疑人生……
而Flash、Flex本身就可以基于Flash Player独立运行,所以不再详细说了。
夹带着谈谈Apple
苹果的桌面开发,我没有开发过,但是在自己的MBP上玩过,基于Objective-C(或现在的Swift)对于很多程序员来讲有点难,现在大多数程序员都是基于C#、Java进行开发,能够使用C、CPP之类中古语言的程序员着实不多,并且与Windows一样,不跨平台,所以开发纯Objective-C的苹果桌面程序的程序员真的是少之又少。
优势嘛,跟Winforms一样,可以非常方便的调用操作系统底层API,劣势也一样,不跨平台、自定义控件比较复杂,可用资源太少。
再来说说QT
QT C++是一个神奇的存在!
我相信现在有非常多的跨平台Desktop Application是基于QT编写的,它不仅能够保证跨平台,而且能够将运行效率最大化。
QT最近在跟车企进行合作,很多监控设备的图形化展示,甚至是试验车内部的液晶仪表盘上都使用QT进行开发的,QT最大的优势就是跨平台!高效率!但是与Objective-C一样,CPP如同一座小山横在了众多server side程序员的面前,如果没有CPP这道小山横贯在前,我认为QT是最好的Desktop Application特别是嵌入式终端的UI开发框架。

QT另外有一个优势在于,它在UI上似乎要比之前几位要方便一些,在它的QML中甚至可以直接使用JavaScript(当然,Java也内置了JS引擎),同时QT中也包含了大量的标准CSS样式表可以使用。
虽然这些特性在其他的语言中也有,例如WPF等,但是QT在保证效率的前提下还能做到跨平台就显得弥足珍贵了!
所以,如果希望自己从事真正意义上的Desktop Application development,QT绝对值得你去学习。
QT有可视化编辑器,但是相比较而言,可能略强于NetBeans的Swing,但是跟VS比起来还是差太远了,不过大多是实际开发都是基于代码的,倒也无所谓。聊胜于无吧。
最后,我们聊聊Electron、NW.js
介于NW的日渐式微,所以我更推荐Electron一些。
我是做大数据开发的,但是我的前端技术还不错,对Sass、Less信手拈来,不基于Bootstrap也能基于Sass或者Less开发类似Bootstrap的UI(虽然审美观还有待大大的加强),我从AngularJS转到VUE这个阵营差不多只花了两天时间,自己可以基于Canvas硬实现流程图(不基于任何框架),但是我自认还达不到熟练使用D3.js或者开发WebGL的水准。
我不需要QT的高效率, 也不希望渲染个大列表需要很长时间,还希望能够达到跨平台的目的,对于DirectUI之类更低层的UI技术根本没有精力去掌握,所以对我来讲Electron简直是最完美的解决方案。
我使用Electron的理由还包括:可以方便的通过Node.JS调用系统API、可以使用SQLite做本地字典项的缓存处理,可以将复杂的计算逻辑放在客户端进行,从而减轻服务器端的压力等等。
所以,Desktop Application的开发,我只推荐两种:
Electron(或NW.js)和QT
其他方案我都不是特别推荐。
当然,如果你的程序只是跑在Windows上,就不用考虑了,WPF是你最好的选择。
Electron开发不要太简单,只要会写HTML,就能写客户端,剩下的交给时间慢慢打磨即可,Node.JS虽说不是最终极的优秀中间件,但是目前来看在Desktop这一块还有发挥余热的地方。
当然,很多人说,我就是不喜欢Electron的应用,体积大效率低。
无可厚非。
但是我不在乎,因为我的硬件,跑个Electron,绰绰有余的多,十几年前刚入行的时候还有人跟我扯打孔机呢。
完结
本文所提到的技术,我并不完全掌握,特别是Objective-C,因为是即兴回答,我也不可能把上面所有的技术都自己跑一便,所以难免有错误,如有笔误之处,还希望各位看官大佬轻拍指点。
链接:https://www.zhihu.com/question/264999651/answer/848101852
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2020-10-29 日补充几张汽车船的图







没想到很多人喜欢,h5目前的界面能力很强,2019-12-01 补充几张图:








下面是原始回答:
我们做船舶配载仪就是用WPF写的,采用了MVVMLight及Ribbon风格

后来我们想要做成Web版,就启动了Web化的任务,经过几个月功能基本已经移植完成了
底层算法用c++写
服务器端:用Java调用C++
前端:采用html5
优点:
- wpf能实现的功能,html5 基本都能够实现
- 想实现单机版只需要用electron包装一下
- 生态好 以前写wpf就我们两个人 现在web端已经4个人了
- 我们在安卓移动端做了尝试,采用cordova 很方便的实现了移植,大概需要几天时间
- 还可以享受WebGL在3D方面的福利
回答楼主问题:
(1) 从Wpf转Html5 还是很快的,完全没压力,我就是直接上手写的
(2)建议楼主学一学,做为程序员终归要学习几几几几种语言的 ~ ~
下面是网页版的几张截图








2020.3.3号 补充几张用h5 做的安卓学习项目的截图



