【问题标题】:C++ API design approachesC++ API 设计方法
【发布时间】:2015-11-06 13:22:27
【问题描述】:

我正在尝试设计一个 API,但我想知道哪种方法更好。我有这个概念,我称之为消息。此消息最多由五个 MessageElement 组成。用户可以向消息中添加大约 300 个消息元素。

到目前为止,我已经想到了两种在 C++ 中对此进行建模的方法。一,我可以有一个 Message 类,其中包含一个添加每个 MessageElement 的方法:

class Message
{
public:
    void AddMessageElement1();
    void AddMessageElement2();
    void AddMessageElement3();
    ...
    void AddMessageElement300();
};

(注意:MessageElements 实际上并不称为“MessageElement1”、“MessageElement2”等。它们实际上有比这更多的描述性名称。我在这里只是笼统地说。)

或者,我用一个类来表示每个 MessageElement,这些类都派生自 MessageElement 基类。因此,Message 类将有一个单一的“Add()”方法,如下所示:

class Message
{
public:
    void Add(const MessageElement& element);
};

方法 1 的优点是类层次结构简单。我的图书馆里不会有 300 多个课程。基本上只有一节课。但是,这将是一个包含 300 多种方法的类。另外,对类的公共 API 的任何更改(比如我必须添加一个额外的 MessageElement 类型)都需要重新编译该类的所有用户。

方法 2 的优点是 Message 类的 API 变得非常简单。此外,添加其他 MessageElement 类型不需要重新编译 Message 类的所有用户。缺点是我将有 300 多个小类填充库的 API。

哪种方法更好?我有点倾向于方法 2。但方法 1 似乎更容易让用户掌握。

【问题讨论】:

  • 不!和 2 一起去吧,求求你了。
  • 也许enum 是数百个类和数百个函数之间的一个很好的中间地带。选项 1 将完全不灵活,选项 2 可能是矫枉过正。
  • @MartinJames,哈哈,是的,2 确实看起来好多了,这就是我倾向于它的原因。我想我只是需要第二个意见。
  • @TartanLlama 我在原帖中没有提到这个,但是不同的消息元素也带参数。就像,MessageElement1 需要 3 个参数,而 MessageElement45 只需要一个参数。
  • @ArcadioAlivioSincero 您可以使用可变参数模板来解决这个问题,但在您的情况下类可能会更清晰。

标签: c++ api


【解决方案1】:

使用 2 号方法。

除了您所说的优点(用于消息的简单 API 和模块化)之外,使用这种方法您将拥有更多可测试的代码(通常可测试的代码是可管理和可重用的代码)。

方法一创造了一个怪物;

如果我去面试,面试官告诉我“我们的代码库中有一个包含 300 种方法的类”,我会认真考虑根本不在那里工作。

使用方法 2,您可以将 MessageElement 中的一些代码集中到一个基类中(比将特定于元素的代码集中到 Message 类中要自然得多)。

【讨论】:

  • 即时:)我同意(1)会搞砸。
猜你喜欢
  • 2011-05-17
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多