Здравствуйте, Cyberax, Вы писали:
>> C>Высказывание Мартина Фаулера: "The first rule of distributed programming
>> C>is don't do distributed programming".
>> Не хорошо пинать классиков, но здесь я с ним не соглашусь
C>Нет, правило хорошее. Если что-то можно не распределять — то лучше не
C>распределять.
Как раз у меня есть противоположный собственный опыт. То, что казалось бы, может работать монолитом, выигрывает по некоторым параметрам (надежность, масштабируемость) будучи распределенным.
C>Ничуть. Это "вызов удаленных процедур", и эмуляция прямого синхронного
C>вызова — лишь один из вариантов.
Я говорил об RPC именно как о Remote Procedure Call, а call -- это синхронный вызов. И вся цель RPC в том, чтобы скрыть от программиста факт распределенности.
>> C>В RPC — аналогично. В *правильном* RPC.
>> Интересно, вот требуется в некий вызов добавить парочку параметров. Как
>> это сделать в RPC кроме как добавить новый вызов?
C>Добавить новый метод с двумя параметрами
А как ты это в С++ делаешь?
В том-то и дело, что в C++ я делаю метод, но вынужден оставлять и старый для совместимости. Либо рефакторить код, чтобы убрать использование старого метода. Между тем, если метод изначально имел формат:
void do_something( const params_t & params );
то расширение структуры params_t не будет сказываться на вызовах do_something.
Вот тестовые протоколы, которые должным образом структурируют информацию (как, например, заголовки HTTP, XML, YAML) как раз позволяют использовать подобный прием.
В бинарном формате такие фокусы позволяют проделывать ASN1 представления (ну и моя ObjESSty

). Однако, как я уже говорил, с бинарными данными приходится больше возиться при их портировании на другие языки программирования.