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