起点————技术选型

一个简单压缩软件的设计与实现系列(一)

Posted by John Mactavish on November 8, 2020

一时兴起,觉得 Windows 上的 WinRar 和 7Z 都不是很好用,想自己设计一个 压缩软件来用。

那么首先进行技术选型。

Linux 因为众所周知的原因不需要这种屑东西, 所以我们的压缩软件主要在 Windows 上用,不用考虑跨平台。显然 Windows 软件 一定是需要 GUI 的。GUI 框架无外乎 QtWinformWPFElectronawtswingJavaFX 等。 QtC++ 开发,也有 pyqt 这种 Python 的变种,但是总的来说太老套,设计 理念有些落后;WinformWPF 都是微软家的,WPF 是基于 Winform 存在的一些问题开发 出来的,更先进一些,可以考虑;Electron 可以借用 Web 开发的技术(如 VueElementUI), UI 设计会更简单一些,Javascript 的库也比较多;awtswingJavaFX 都是 Java 系的, 其中 JavaFXJava 最新的 GUI 框架,也比较 match 我最熟悉的 Java 技术栈。

然后寻找核心的支持压缩的包。WPF 可以在 dotnet core 上用 C# 开发,所以我们主要寻找 C# 的包,鉴于 dotnet core 上与 C++ 较好的互操作性,dll 也可考虑;除了 Github 外 还可以在 dotnet 包管理平台 nuget 上寻找包; C# 的一些包可用性还是不错的。Electron 基于 NodeJS,需要 Javascript 或者 Typescript 的 包,可以在包管理平台 npm 查找;结果有些失望,找到的包的 功能都相对较弱,可用性不强;又鉴于我对 Javascript 开发的体验不佳,所以 Electron 方案 也 pass。Java 的生态还是很丰富的,可以在 Maven Central 寻找 包;最成熟的似乎是 Apache Commons Compress,但是它当前版本不支持分卷,不支持常用的 rar 格式,对压缩文件 内部条目的属性也支持偏少;另一个选择是 sevenzipjbind,它是压缩领域著名的 7Z SDK 的 Java Binding 版本,个人开发、文档还算全、关注度略低, 但是因为 7Z Engine 的加持,它的功能更加全面、速度更快。

最后,我们希望 GUI 尽可能美观,所以还需要 UI 框架或者皮肤。WPF 主要有 AvaloniaModernWpfMaterialDesignInXamlToolkit 三种选项。但是我后来发现 WPF 的界面编写需要用到一种 类似于 xml 的标记语言 xaml,而 JavaFX 可以改用 ScalaFX Wrapper 以享受用 Scala 原生 DSL 编写的快感,所以我最终确定用 JavaFXScalaFX) 技术栈。专用于 JavaFX 的 UI 框架 主要有 JFoenixJMetro;前者风格是 Material Design,更成熟、关注度更高,但是 框架侵入性强;后者风格是 Win10 风,更轻量、使用简单,也还算美观;最终我决定选择后者。

综上,我们用 JavaFX,准确来说是 Scala 版本的 ScalaFX,作为 GUI 框架;搭配 UI 库 JMetro 使用;而用 sevenzipjbind 提供压缩、解压缩功能。


如果你喜欢我的文章,请我吃根冰棒吧 (o゜▽゜)o ☆

contribution

最后附上 GitHub:https://github.com/gonearewe