我的产品有多个组件,其中大多数是用 C++ 编写的,但有一个是用 C 编写的。我们经常遇到这样的场景,即一条信息通过 IPC 流经每个组件。
我们使用结构定义这些消息,以便我们可以将它们打包成消息并通过消息队列发送。这些结构仅用于“传输”目的,并且以仅用于该目的的方式编写。我遇到的问题是:程序员坚持使用该结构并将其用作信息的长期容器。
在我看来,这是一个问题,因为:
1)如果我们改变传输结构,他们所有的代码都会被破坏。这里应该有封装,这样我们就不会遇到这种情况。
2) 消息结构非常笨拙,仅设计用于传输信息……这个结构似乎也不太可能碰巧成为这些其他组件访问此数据(长期)的最方便形式。
我的问题是:如何以编程方式防止这种误用?我想强制这些结构只能用于运输。
编辑:我会尽力在这里提供一个例子:
struct smallElement {
int id;
int basicFoo;
};
struct mediumElement {
int id;
int basicBar;
int numSmallElements;
struct smallElement smallElements[MAX_NUM_SMALL];
};
struct largeElement {
int id;
int basicBaz;
int numMediumElements;
struct mediumElement[MAX_NUM_MEDIUM];
};
其效果是人们只是坚持“大元素”,而不是从大元素中提取他们需要的数据并将其放入满足他们需求的类中。