Посредничество (Indirection)¶
Indirection предлагает ввести промежуточный слой между подсистемами, чтобы ослабить прямую зависимость.
Опора на ООП¶
Indirection опирается на интерфейсы, инкапсуляцию и низкую связанность: вместо прямой связи два участника работают через промежуточный объект или слой.
Что показывает пример на 1С¶
- прикладной код работает с
NotificationGateway. - шлюз уже сам решает, какой отправитель использовать: email, Telegram или другой канал.
- доменный код не зависит напрямую от конкретного канала доставки.
Пример¶
Близость к Adapter, Proxy и Decorator¶
Indirection близок к Adapter, Proxy и Decorator, потому что во всех четырех случаях между клиентом и реальной реализацией появляется промежуточный слой.
Снаружи это действительно похоже:
- клиент не идет напрямую к конечному объекту;
- появляется дополнительный объект или модуль между слоями;
- часть зависимости скрывается за более удобной точкой входа.
Но у Indirection намерение шире и архитектурнее.
Indirectionнужен, чтобы развязать две части системы через промежуточный слой.Adapterнужен, чтобы перевести один контракт в другой.Proxyнужен, чтобы контролировать доступ, создание или способ обращения к объекту.Decoratorнужен, чтобы нарастить поведение поверх существующего компонента.
Для 1С это удобно различать так:
NotificationGatewayмежду прикладным кодом и каналами доставки - этоIndirection;- обертка над старым общим модулем с неудобным API - это
Adapter; - модуль, который проверяет права или лениво создает тяжелый сервис - это
Proxy; - слой логирования, ретраев или метрик вокруг отправителя - это
Decorator.
Где полезен в 1С¶
- между прикладной логикой и внешними интеграциями;
- при переходе на новую подсистему без массовой правки клиентов;
- когда нужна точка развязки между двумя нестабильными частями системы.
Когда принцип применяют неправильно¶
- если промежуточный слой ничего не упрощает;
- если из-за лишней прослойки архитектура становится мутнее;
- если
Indirectionпревращается в бесконечную матрешку сервисов.