Ответ с углом, который никто не обсуждал; временная развязка . Это можно сделать несколькими способами:
При использовании вышеизложенного (кроме асинхронной монады) вы часто имеете дело с сообщениями явно, а не с вызовами методов. Это приводит к размышлениям, связанным с тем, как работает передача сообщений (идемпотентность их обработки, очереди для их хранения при передаче, данные безопасности, прикрепленные к их конвертам, логика повторных попыток в обработчиках, а не в запросчиках, ...).
Переходя к архитектуре, ориентированной на сообщения, которая временно развязана, вы можете упростить расширение приложения - особенно если вы в основном выполняете публикацию-подписку (см. Также архитектуру, управляемую событиями) - что угодно может прослушивать события и реагировать на них. их, и вы не привязываете реализацию интеграторов к сайтам начальных вызовов.
Веб-сайты, которые переносят работу в очереди, в целом более отзывчивы, поскольку не позволяют рабочим потокам зависать в ожидании ввода-вывода. Они также часто дешевле поддерживать в долгосрочной перспективе.
Для различных типов связывания типа компиляции (и других метрик), просмотрите http://www.ndepend.com/Metrics.aspx и прочитайте некоторые об этом сами.