我即将用 C++ 编写一个程序,但我不确定如何去做。我想创建一个可与命令行前端和 GUI 前端一起使用的程序,因为我不想将用户绑定到特定界面,例如为了依赖关系而使用小部件工具包。
最好的方法是如何做到这一点?我知道 RSync 和 SSH 等一些程序在 GUI 中有前端,但我不确定这是如何完成的。拥有一个仅使用 system() 来运行它同时拥有漂亮 GUI 的程序不是很奇怪吗?
我即将用 C++ 编写一个程序,但我不确定如何去做。我想创建一个可与命令行前端和 GUI 前端一起使用的程序,因为我不想将用户绑定到特定界面,例如为了依赖关系而使用小部件工具包。
最好的方法是如何做到这一点?我知道 RSync 和 SSH 等一些程序在 GUI 中有前端,但我不确定这是如何完成的。拥有一个仅使用 system() 来运行它同时拥有漂亮 GUI 的程序不是很奇怪吗?
您在库中实现程序的算法,小心避免任何 UI 内容。您的算法的 API 在头文件中指定。
然后,您可以编写几个使用这个库的应用程序,一个实现 GUI 前端,一个实现命令行界面。它们包含标头并针对 API 进行编译,然后您将库链接到它。
注意不要以不一致的设置编译库和 GUI。
IME 在您首次实现命令行 UI 时,可以最好地实现算法与 UI 的分离。您可能必须为该分离使用回调。
在不知道任何其他要求的情况下,最简单的答案就是将您的“后端”编译为库,然后将您的各种“前端”链接到它。
更复杂的答案涉及将您的后端设置为守护程序/服务器。
您不需要系统调用来执行任何这些操作(除非您有非常具体的要求)。
您可以从 MVC 设计模式中激发自己的灵感。不同的前端是模型控制器上的视图。控制器可以是一个库,它将考虑您的应用程序的常见任务。GUI 部分和 shell 部分(或例如其他语言集成部分)都使用这个“无头”库。从一开始就明确分离将有助于实施模块化和解耦。
您可以将 QT 用于 GUI 前端。但我实际上只是先写你的图书馆。然后最后做你的GUI。
一些有用的建议
确保在编写代码的同时编写单元测试。
确保在编写代码时使用代码覆盖率工具来评估单元测试。
请务必避免使用 BOOL 类型,因为这些类型通常在平台 API(如 win32)中定义。使用 bool 代替。
在头文件中前向声明尽可能多的类型。在每个库头文件中包含尽可能少的头文件。
尽可能少地暴露接口。
请务必遵循 C++ 的良好编码实践。 Herb Sutters Book C++ 编码标准在这方面非常出色。
一旦你写了你的 gui,在你的 GUI 事件处理程序中放尽可能少的业务逻辑。基本上,您希望您的库与您的 GUI 无关。其他人在这里提到了 MVC 模式。这是极好的建议。