Dimka, на тему архитектуры написана тьма книг, в их пересказе смысла не вижу.
Инкапсуляция это такая вещь (как и все хорошее), ее должно быть ровно столько сколько нужно и ни на грамм больше, критерий примерно такой
точнее в общем сказать не получится, придется переходить на частности.
В хорошей архитектуре должна быть сильная внутримодульная связанность и слабая внежмодульная. интерфейсы межмодульного взаимодействия и есть одна из основных задач архитектора.
В том, что данные гоняются я ничего плохого не вижу, лишь бы они не копировались без причины из одних буферов в другие только ради передачи в другие модули. Если кто знаком с веб приложениями, то там данные гоняются мама не горюй и ничего...
Враппер есть хорошо, да это повышает накладные расходы, но при таком подходе каждый модуль изолирован от всех других и теоретически не зависим даже интерфейсно, более того враппер позволяет проводить тестирование каждого модуля в отдельности. Стандартный пример модуль шифрования для которого пишутся 2 затычки: одна "слева" подает на вход случайные или наперед известные данные и читает из выхода после чего сравнивает (если одинаковые, то все волшебно), вторая "справа" - получает зашифрованные данные с выхода и запихивает их на вход.
Такая декомпозиция позволяет изменять внутренности всех модулей разом, при условии, что интерфейсы заданы, что просто мега гибко.
Если ваша система похожа на то, что вы описали, то вам надо срочно уволить архитектора, ибо он не выполняет основную свою работу (он не занимается архитектурой, возможно он занимается чем-то еще, но только не своими обязанностями).