Как разделить бизнес-концепции на разных языках программирования?

Мы разрабатываем распределенную систему, построенную из компонентов, реализованных на разных языках программирования (C++, C #и Python )и взаимодействующих друг с другом по сети. Все компоненты системы работают с одними и теми же бизнес-концепциями и взаимодействуют друг с другом также с точки зрения этих концепций.

В результате мы серьезно боремся со следующими двумя проблемами:

  1. Синхронизация представления наших бизнес-концепций на этих трех языках
  2. Сериализация/десериализация наших бизнес-концепций на этих языках

Наивным решением этой проблемы было бы простое определение одних и тех же структур данных (и кода сериализации )трижды (для C++, C #и Python ).

К сожалению, это решение имеет серьезные недостатки :

  • . Это создает много «дублирования кода»
  • . Требуется огромное количество межъязыковых -интеграционных тестов, чтобы все было синхронизировано

. Другое рассмотренное нами решение основано на таких фреймворках, как ProtoBufs или Thrift. Эти фреймворки имеют внутренний язык, на котором определяются бизнес-концепции, а затем представление этих концепций на C++, C #и Python (вместе с логикой сериализации )автоматически -генерируется этими рамки.

Хотя это решение не имеет вышеуказанных проблем, у него есть еще один недостаток :: код, сгенерированный этими платформами, связывает вместе структуры данных, представляющие базовые бизнес-концепции, и код, необходимый для сериализации/десериализации этих структур данных -.

Мы считаем, что это загрязняет нашу кодовую базу — любой код в нашей системе, который использует эти автоматически -сгенерированные классы, теперь «знаком» с этой логикой сериализации/десериализации (— серьезная утечка абстракции ).

Мы можем обойти это, обернув автоматически -сгенерированный код нашими классами/интерфейсами, но это возвращает нас к недостаткам наивного решения.

Может ли кто-нибудь порекомендовать решение, которое обходит описанные проблемы?

15
задан Henk Langeveld 3 August 2012 в 20:18
поделиться