【发布时间】: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 您可以使用可变参数模板来解决这个问题,但在您的情况下类可能会更清晰。