起点————技术选型

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

Posted by John Mactavish on November 8, 2020

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

那么首先进行技术选型。

Linux 因为众所周知的原因不需要这种屑东西, 所以我们的压缩软件主要在 Windows 上用,不用考虑跨平台。显然 Windows 软件 一定是需要 GUI 的。GUI 框架无外乎 Qt、Winform、WPF、Electron、awt、swing 和 JavaFX 等。 Qt 用 C++ 开发,也有 pyqt 这种 Python 的变种,但是总的来说太老套,设计 理念有些落后;Winform 和 WPF 都是微软家的,WPF 是基于 Winform 存在的一些问题开发 出来的,更先进一些,可以考虑;Electron 可以借用 Web 开发的技术(如 Vue、ElementUI), UI 设计会更简单一些,Javascript 的库也比较多;awt、swing 和 JavaFX 都是 Java 系的, 其中 JavaFX 是 Java 最新的 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 主要有 Avalonia、ModernWpf 和 MaterialDesignInXamlToolkit 三种选项。但是我后来发现 WPF 的界面编写需要用到一种 类似于 xml 的标记语言 xaml,而 JavaFX 可以改用 ScalaFX Wrapper 以享受用 Scala 原生 DSL 编写的快感,所以我最终确定用 JavaFX(ScalaFX) 技术栈。专用于 JavaFX 的 UI 框架 主要有 JFoenix 和 JMetro;前者风格是 Material Design,更成熟、关注度更高,但是 框架侵入性强;后者风格是 Win10 风,更轻量、使用简单,也还算美观;最终我决定选择后者。

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


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

contribution

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