Что теряется, когда связи нет как объекта
Если взаимодействие сводится к вызову, у него нет памяти. Каждый обмен начинается с нуля: кому что можно, какой нужен контекст, работает ли эта пара вообще, всё выясняется заново. Знание о собственной структуре система не накапливает.
Отношение как объект хранит это знание: что стороны согласовали, как часто им полезно общаться, что уже передано, насколько связь надёжна и стоит ли её поддерживать дальше.
Что содержит связь
- общее состояние границы: ту часть данных, которую видят обе стороны;
- владение полями: кто вправе менять какую часть общего состояния;
- чередование прав: следующую ревизию фиксирует одна сторона, поэтому правки не конфликтуют;
- атомарные ревизии и свидетельства: историю изменений, по которой восстанавливается любое состояние;
- согласованные условия протокола: частоту, объём, режим обмена;
- метрики активности и синхронизации;
- силу связи и её затухание;
- состояние жизненного цикла: испытательный срок, активность, сон, отставка.
Переговоры вместо назначения
Связь возникает по согласию сторон, приказом среды её не создать. Инициатор предлагает условия. Вторая сторона принимает, отклоняет, откладывает или выдвигает встречное предложение, и тогда роли меняются местами. Получается чередующийся протокол переговоров с сохранённой стенограммой.
Польза стенограммы видна позже. Когда нужно понять, почему два участника работают именно так, ответ лежит в истории их договорённостей, а не в чьей-то памяти. Пересмотр условий идёт тем же механизмом: перезаключить связь значит пройти тот же путь, что и при заключении.
Адаптация под наблюдаемую пользу
Условия обмена не вечны. Если связь приносит мало пользы, стороны снижают частоту и объём обмена, если много, усиливают. Связь, которая перестала приносить пользу, сначала слабеет, потом засыпает, потом уходит в отставку.
Звучит как биологическая метафора, но смысл инженерный. В ограниченной среде поддержание связи стоит ресурсов, и автоматическое ослабление бесполезного не даёт тратить их на структуру, которая больше ничего не приносит. Без такого механизма долгоживущая система обрастает связями, которые никто не решается удалить.
Испытательный срок
Новая связь не получает полных прав сразу. Сначала она в испытательном состоянии: обмен идёт, но объём ограничен, а надёжность накапливается. Полноценной связь становится только после подтверждённой пользы.
Тот же принцип мы применяем к автономии агентов в прикладных системах: права расширяются по накопленной статистике, авансом их не выдают. Разница в том, что здесь принцип встроен в саму среду и не зависит от политики конкретного проекта.
Что это даёт системе целиком
- Структура системы становится наблюдаемой: связи можно перечислить, измерить и объяснить.
- Конфликты правок исключает сама конструкция, договорённости между разработчиками для этого не нужны.
- Разрыв отношения становится штатной операцией. Удалять код для этого не нужно.
- История договорённостей заменяет устное знание о том, почему всё работает именно так.
- Стоимость поддержания структуры видна, и ею можно управлять.
Есть и ограничение. Всё это оправдано там, где отношений много и они долгие. Для пары компонентов, которые обмениваются сообщениями два раза в час, обычная очередь проще и дешевле.