2010-08-23 117 views
2

我即将在C++中编写程序,但我不确定如何去做。我想创建一个可以与命令行前端一起使用的程序,但也可以使用GUI前端,因为我不想将用户绑定到特定的接口,例如为了依赖关系而使用的部件工具箱。在C++中设计一个前端/后端系统?

如何做到这一点最好的方法?我知道像RSync和SSH这样的程序在GUI中有前端,但我不确定这是如何完成的。如果有一个程序只使用system()来运行它,同时拥有一个漂亮的图形用户界面(GUI),是不是很难?

回答

6

您实现在你的程序的算法,小心避免任何UI的东西。您的算法的API在头文件中指定。

然后,您可以编写使用此库的多个应用程序,其中一个实现GUI前端和一个命令行界面。它们包含头文件并根据API进行编译,并将库链接到它。
请注意不要使用不一致的设置编译库和GUI。

当你第一次实现一个命令行UI时,IME算法从UI分离可以达到最佳效果。您可能必须雇用callbacks进行分离。

6

不知道任何其他要求,最简单的答案就是将您的“后端”编译为库,然后将您的各种“前端”与它对应。

更复杂的答案是将后端设置为守护程序/服务器。

你不应该需要系统调用来做这些(除非你有非常特殊的要求)。

1

您可以激发自己的MVC设计模式。不同的前端是您的模型控制器上的视图。控制器可以是一个将影响应用程序常见任务的库。 GUI部分和shell部分(或其他语言集成部分)都使用这个“无头”库。从一开始就有明确的分离将有助于实施模块化和解耦。

+1

是不是MVC_views_查看_model_的数据? – sbi 2010-08-23 16:13:33

+0

@sbi,你是对的,我的反应不够精确,我会编辑我的答案。 – David 2010-08-23 17:20:06

0

您可以在GUI前端使用QT。但我实际上只是先写你的图书馆。然后做你的GUI最后。

一些有益的建议

  1. 一定要编写单元测试在编写代码。

  2. 确保在编写代码时使用代码覆盖工具来评估您的单元测试。

  3. 一定要避免BOOL类型,因为它们通常在平台API(如win32)中定义。改用bool。

  4. 向前声明尽可能多的类型,你可以在你的头文件中。在每个库头文件中包含尽可能少的头文件。

  5. 公开尽可能少的接口。

  6. 一定要遵循良好的编码习惯了C++。 Herb Sutters Book C++ coding standards is excellent in this regard.

  7. 一旦你写了你的gui,尽可能在你的GUI事件处理程序中尽可能少的业务逻辑。基本上你希望你的图书馆对你的GUI不可知论。其他人在这里提到了MVC模式。这是非常好的建议。