Мы разрабатываем распределенную систему, построенную из компонентов, реализованных на разных языках программирования (C++, C #и Python )и взаимодействующих друг с другом по сети. Все компоненты системы работают с одними и теми же бизнес-концепциями и взаимодействуют друг с другом также с точки зрения этих концепций.
В результате мы серьезно боремся со следующими двумя проблемами:
Наивным решением этой проблемы было бы простое определение одних и тех же структур данных (и кода сериализации )трижды (для C++, C #и Python ).
К сожалению, это решение имеет серьезные недостатки :
. Другое рассмотренное нами решение основано на таких фреймворках, как ProtoBufs или Thrift. Эти фреймворки имеют внутренний язык, на котором определяются бизнес-концепции, а затем представление этих концепций на C++, C #и Python (вместе с логикой сериализации )автоматически -генерируется этими рамки.
Хотя это решение не имеет вышеуказанных проблем, у него есть еще один недостаток :: код, сгенерированный этими платформами, связывает вместе структуры данных, представляющие базовые бизнес-концепции, и код, необходимый для сериализации/десериализации этих структур данных -.
Мы считаем, что это загрязняет нашу кодовую базу — любой код в нашей системе, который использует эти автоматически -сгенерированные классы, теперь «знаком» с этой логикой сериализации/десериализации (— серьезная утечка абстракции ).
Мы можем обойти это, обернув автоматически -сгенерированный код нашими классами/интерфейсами, но это возвращает нас к недостаткам наивного решения.
Может ли кто-нибудь порекомендовать решение, которое обходит описанные проблемы?