Я часто сталкивался с подобной проблемой, когда у меня был бы новый фасад (обычно класс Java), а затем какое-то новое «промежуточное программное обеспечение», которое в конечном итоге связывалось бы со службами, расположенными в другом месте.
Мне бы пришлось поддерживать несколько средств связи, в том числе внутри процесса и через сеть (часто с шифрованием).
Мое обычное решение - определить понятие пакета данных с его подтипами, содержащими конкретные формы данных (например, конкретные ответы, конкретные запросы) и т. Д. Важно то, что все пакеты должны быть в некоторой форме сериализуемыми ( У Java есть понятие для этого, я не уверен насчет C ++).
У меня тогда есть агент и поставщик. Агент принимает запросы программного домена, создает пакеты. Он перемещает их в тупик, который отвечает только за общение. Удаленная заглушка принимает пакет и передает его провайдеру. Поставщик переводит его обратно в объект домена, который он затем предоставляет фактическим услугам. Он принимает ответ, отправляет его обратно агенту через заглушку и т. Д.
Преимущество этого подхода состоит в том, что я создаю несколько слоев абстракции. Агент / провайдер ориентирован на уровень домена и его трансляцию в пакеты и обратно. Пара скелет-заглушка отвечает за маршаллинг и отправку пакетов туда и обратно. Поменяв местами мою пару скелет-заглушка с подтипами, я могу заставить одну и ту же программу взаимодействовать по-разному (например, встроенную в одну и ту же JVM, через что-то вроде JMS, напрямую через сокеты и т. Д.)