­

如何选择UI框架

  • 2019 年 10 月 28 日
  • 笔记

Windows界面开发,笔者使用过的方案有三种:MFC、Duilib、WEB(基于CEF运行容器),各有优缺点。

MFC进行界面开发,其所见即所得,通过向导方便给控件增加处理函数,实现很简单,初学者练手必备,但它的缺点也是很明显的,不是使用DUI技术,没有布局概念,不支持背景贴图,很难做出炫酷的界面,适合界面要求不高的工具类产品(比如测试工具)。

Duilib进行界面开发,其使用DUI技术,通过XML文件编写布局、控件、设置属性,国内很多知名软件(包括微信PC版、91助手、钉钉等)都使用Duilib库作为界面开发库,缺点是有bug很久没有更新,如果自己没有界面开发库的沉淀,建议将Duilib库作为基础,进行扩展和BUG修订。

基于CEF运行容器的WEB技术进行界面开发,WEB强大的渲染能力无需多说,缺点是软件包需要携带CEF库(70M左右),需要扩展CEF支持WEB调用原生能力。如果产品本身是WEB形态,采用WEB技术界面开发,再合适不够。

笔者在项目实践过程中,采用混合开发方案,将Duilib和WEB两种方案结合起来,对于要求高性能的界面(比如窗口实时渲染)使用Duilib(C++)开发,对于复杂界面、炫酷界面使用WEB开发,然后扩展CEF提供JS接口让WEB可以跟原生C++层进行通信,基于该通信通道WEB就可以将需要调用原生的逻辑交给C++来实现。混合开发方案充分利用WEB强大渲染能力,又解决了WEB性能差、与原生系统交互能力差的问题。许多移动端产品也使用混合开发方案,比如天猫手机端。

除此之外,还有其它的界面框架可供选择:

l Electron, 最大优点就是跨平台,一套代码就可以在Windows、Linux、MacOS桌面系统上运行,其基于nodejs开发electron module,electron module内包含chromium内核(类似于CEF),使用WEB技术开发。

l QT,最大优点也是跨平台,一套代码可以在桌面系统Windows、Linux、MacOS,移动端系统Android、iOS、WP上运行,使用C++语言开发。

l WPF,微软推出基于Windows的用户界面框架,属于.NET Framework 3.0的一部分,使用C#语言开发。

在选择界面开发框架时,要结合产品形态、团队开发人员的情况作出决策。

第一,产品需要支持的平台要有清楚的认识,如果需要支持多个平台,就要考虑跨平台的框架,自己开发跨平台框架的难度是很大的。如果需要支持XP,就要注意界面开发框架是否支持,许多框架已经不支持XP系统。

第二,产品是否有WEB版本,如果有WEB版本优先选择支持WEB开发技术的框架,WEB应用转原生应用,套CEF容器再少量适配修改就能解决,反过来,原生应用WEB化,得重做。

第三,产品对性能要求、原生能力调用方面的评估,对性能要求高、原生能力交互强,不建议使用WEB开发技术的框架,其性能差、不方便与原生系统交互是其主要的缺点。

第四,评估开发团队的主要人员是C++,还是Web,还是C#,然后选择相应的框架。