さまざまなプログラミング言語 (C++、C#、および Python) で実装され、ネットワークを介して相互に通信するコンポーネントから構築された分散システムを開発します。システム内のすべてのコンポーネントは、同じビジネス コンセプトで動作し、これらのコンセプトに関しても相互に通信します。
その結果、次の 2 つの課題に非常に苦労しています。
- これら 3 つの言語でのビジネス コンセプトの表現を同期させる
- これらの言語間でのビジネス コンセプトのシリアル化/逆シリアル化
この問題の単純な解決策は、同じデータ構造 (およびシリアル化コード) を 3 回定義することです (C++、C#、および Python の場合)。
残念ながら、このソリューションには重大な欠点があります。
- 多くの「コードの重複」が発生します</li>
- すべてを同期させるには、膨大な量の言語間統合テストが必要です
私たちが検討した別のソリューションは、ProtoBufs や Thrift などのフレームワークに基づいています。これらのフレームワークには、ビジネス概念が定義されている内部言語があり、C++、C#、および Python でのこれらの概念の表現が (シリアライゼーション ロジックと共に) これらのフレームワークによって自動生成されます。
このソリューションには上記の問題はありませんが、別の欠点があります。これらのフレームワークによって生成されたコードは、基礎となるビジネス概念を表すデータ構造と、これらのデータ構造をシリアライズ/デシリアライズするために必要なコードを結合します。
これにより、コード ベースが汚染されていると感じています。これらの自動生成されたクラスを使用するシステム内のコードは、このシリアル化/逆シリアル化ロジック (深刻な抽象化リーク) に「慣れている」ようになっています。
自動生成されたコードをクラス/インターフェースでラップすることで回避できますが、これは単純なソリューションの欠点に戻ります。
説明されている問題を回避するソリューションを推奨できる人はいますか?