Многие проекты являются срочными, из-за чего некоторые важные принципы выпадают из внимания. Это частая причина появления технического долга: «Мы знаем, что это плохо, но исправим это позже», а позже так и не наступает
Люди, дающие советы, постоянно превозносят преимущества слабо связанных систем, но можно ли проектировать системы, в которых ничто ни с чем не связано?
Исходя из зависимости между данными и сервисами Б и В, было бы разумно объединить эти сервисы, чтобы избежать задержек, повысить отказоустойчивость и исключить проблемы масштабируемости, связанные с взаимодействиями между этими сервисами
нестабильность, представляет собой отношение эфферентной связанности к сумме эфферентной и афферентной связанности, как показано в уравнении 4.2. Уравнение 4.2. Нестабильность
В этом уравнении Ce представляет собой эфферентную (исходящую) связанность, а Ca — афферентную (входящую). Метрика нестабильности определяет нестабильность базы кода. База с высоким уровнем нестабильности при внесении изменений легче выходит из строя ввиду высокой связанности.
Афферентная связанность оценивается по количеству входящих связей с артефактом кода (компонентом, классом, функцией и т.д.). Эфферентная связанность оценивается по количеству исходящих связей с другими артефактами кода.
Декомпозиция на основе компонентов и тактическое ветвление — два распространенных подхода к разделению монолитных приложений. Декомпозиция на основе компонентов (component-based decomposition) предполагает применение различных паттернов рефакторинга в целях уточнения и извлечения компонентов (логических строительных блоков приложения) и формирования распределенной архитектуры поэтапным и контролируемым образом. Тактическое ветвление (tactical forking) включает создание копий приложения и удаление ненужных частей, что позволяет из остатков сформировать сервисы, подобно тому как скульптор создает прекрасное произведение искусства, отсекая от массива гранита или мрамора все ненужное.