您是否有关于如何包装内部库以将其传递给客户端的建议?

时间:2010-08-20 17:10:50

标签: c++ interface

在我的公司,我们正在使用提供大量服务的跨平台实用程序库。

这包括跨平台代码(例如,包装Win32或pthread API的线程类)或每个公司特定代码(例如,用于处理我们的服务器和客户端应用程序之间的专有通信协议的类)。

我们需要将一部分功能交付给客户端,客户端同意使用与库使用的相同的编译器和编译器选项。

目前,我的设计主要是确保我们的库的每个版本的界面都与之前的版本二进制兼容:

  1. 提供DLL / SO库
  2. 使用简单明了的命名约定(受Java camelCaseNaming等启发)
  3. 使用STL
  4. 使用全局命名空间(并为任何带有非模糊名称的宏添加前缀以避免名称冲突)
  5. 包含需要使用的每个类
  6. 为所有事情做好准备(并向客户提供“公共部分”)
  7. 简化和统一界面
  8. 我们的PImpl类中没有虚拟方法
  9. 没有内联代码,除非异常(甚至常量是导出的常量值,在编译源中定义,只是在公共头中声明)
  10. 实用程序/间接函数的异常内联代码,内部没有太多代码(例如,内联交换函数,调用它交换的对象的非内联交换方法)
  11. 一些简单的内联代码,用于一些没有实际代码的简单“值类”,以避免不必要的开销(例如,内联复杂的数字类)
  12. 通过内联代码提供高级服务(调用描述的PImpl-ed类)(意味着客户端可以根据自己的需要重用/修改它)。
  13. 我的清单是否完整,还是我错过了一些可以简化未来维护/演变的内容?

    我的一个观点是错误吗?

1 个答案:

答案 0 :(得分:0)

Facade Pattern

我用它来为大型子系统创建“编程接口”。根据需要创建一个或多个。