私は複数のコンポーネントを持つ製品に取り組んでいます。それらのほとんどは C++ で記述されていますが、1 つが 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];
};
その結果、ユーザーは必要なデータを largeElement から抽出してニーズを満たすクラスに入れるのではなく、単に「largeElement」に固執することになります。