我们开发了一个分布式系统,该系统由以不同编程语言(C++、C# 和 Python)实现的组件构建,并通过网络相互通信。系统中的所有组件都以相同的业务概念运行,并且也根据这些概念相互通信。
因此,我们在以下两个挑战中苦苦挣扎:
- 使我们的业务概念在这三种语言中的表达保持同步
- 跨这些语言的我们的业务概念的序列化/反序列化
对于这个问题,一个简单的解决方案就是定义相同的数据结构(和序列化代码)三次(对于 C++、C# 和 Python)。
不幸的是,这个解决方案有严重的缺点:
- 它会产生很多“代码重复”</li>
- 它需要大量的跨语言集成测试来保持一切同步
我们考虑的另一个解决方案是基于 ProtoBufs 或 Thrift 等框架。这些框架有一个内部语言,其中定义了业务概念,然后这些概念在 C++、C# 和 Python 中的表示(连同序列化逻辑)由这些框架自动生成。
虽然这个解决方案没有上述问题,但它还有另一个缺点:由这些框架生成的代码将代表底层业务概念的数据结构和序列化/反序列化这些数据结构所需的代码耦合在一起。
我们觉得这污染了我们的代码库——我们系统中使用这些自动生成的类的任何代码现在都“熟悉”这种序列化/反序列化逻辑(严重的抽象泄漏)。
我们可以通过用我们的类/接口包装自动生成的代码来解决它,但这让我们回到了幼稚解决方案的缺点。
谁能推荐一个解决所描述问题的解决方案?