Введение

Система со слабо связанными компонентами

В вычислительной технике и проектировании систем слабосвязанная система – это система, в которой компоненты слабо связаны между собой (имеют возможность независимого изменения), и, следовательно, изменения в одном компоненте минимально влияют на существование или производительность другого компонента. В такой системе каждый из компонентов обладает минимальным знанием или вовсе не обладает знанием об определениях других отдельных компонентов. К подобным областям относятся связность классов, интерфейсов, данных и сервисов. Слабая связность является противоположностью сильной связности.

Преимущества и недостатки

Компоненты слабосвязанной системы могут быть заменены альтернативными реализациями, предоставляющими те же сервисы. Компоненты слабосвязанной системы менее зависимы от конкретной платформы, языка программирования, операционной системы или среды разработки. Если системы разделены во времени, обеспечить транзакционную целостность затруднительно; необходимы дополнительные протоколы координации. Репликация данных между различными системами обеспечивает слабую связанность с точки зрения доступности, но создает проблемы с поддержанием согласованности (синхронизацией данных).

Методы снижения сцепления

Слабая связанность интерфейсов может быть усилена за счет публикации данных в стандартном формате (например, XML или JSON). Слабая связанность между программными компонентами может быть усилена использованием стандартных типов данных в параметрах. Передача пользовательских типов данных или объектов требует, чтобы оба компонента имели представление об определении этих данных. Слабая связанность сервисов может быть усилена за счет уменьшения объема информации, передаваемой в сервис, до ключевых данных. Например, сервис отправки письма будет наиболее универсальным, если передавать только идентификатор клиента, а адрес клиента получать непосредственно в сервисе. Это обеспечивает независимость сервисов, поскольку их не нужно вызывать в определенном порядке (например, GetCustomerAddress, SendLetter).