# Connector Transparency (Direct vs Indirect Connection)

**In short:** An indirect connector puts a channel between components, so a sender does not need to know who receives its data. This lowers coupling, but it makes the overall flow harder to follow.

## Explanation

Connector transparency describes how much two interacting components know about each other. See the article Software Connector for what a connector is.

**Indirect connection.** A message channel sits between sender and receiver. The sender does not need to know which application will read the data. Both sides share one assumption: the purpose of the channel, which the channel name expresses. Anyone who reads from it is interested in that kind of data.

**What the intermediary gives you:**

- **Less knowledge of the other side.** The sender does not name its receivers.
- **Independent timing.** Sender and receiver do not have to run at the same time. Sending a message does not require both systems to be ready.
- **Broadcast.** Because the two sides are decoupled, integrators can send one message to many receivers.
- **Changes in transit.** The intermediary can transform messages without the sender or receiver knowing.

**Publish-subscribe.** The publisher sends an event to one input channel. The channel delivers a copy to every subscriber. It splits into one output channel per subscriber. The publisher never names its recipients. See Publish/Subscribe Channel and Message Channel.

**Low coupling.** With event notification, the source does not care about the response. That keeps coupling low. See Loose Coupling for the general idea.

## Example

An online shop publishes an "order placed" event to a channel. A billing service and a shipping service each subscribe. The shop code never mentions either one. If the shipping service is down for an hour, it can still handle the event when it returns. Later, a team adds a reporting service as a third subscriber. The shop code does not change.

## Trade-offs

Indirection hides the overall flow. It is hard to see in any program text. Often the only way to discover it is to monitor a running system. This makes tracing and debugging harder.

A publisher sends to one channel. The channel delivers a copy to each subscriber, and the publisher knows none of them.

```mermaid
flowchart LR
  P[Publisher] --> C((Channel))
  C --> S1[Subscriber A]
  C --> S2[Subscriber B]
  C --> S3[Subscriber C]
```

## Checks

- Each message channel or topic has a documented purpose, because the channel name is the assumption sender and receiver share.
- Where publishers broadcast events, the document says that each subscriber gets its own copy and the publisher does not name recipients.
- For event-based flows, the document describes the end-to-end flow somewhere explicit, since it is not visible in program text.

## Related

- [Software Connector](https://arc.fuet.ch/concepts/fundamentals/software-connector.md)
- [Message Channel](https://arc.fuet.ch/concepts/integration/message-channel.md)
- [Publish/Subscribe Channel](https://arc.fuet.ch/concepts/integration/publish-subscribe-channel.md)
- [Loose Coupling](https://arc.fuet.ch/concepts/principles/loose-coupling.md)
- [Messaging](https://arc.fuet.ch/concepts/integration/messaging.md)
- [Remote Procedure Call](https://arc.fuet.ch/concepts/integration/remote-procedure-call.md)
- [Synchronous vs Asynchronous Connector](https://arc.fuet.ch/concepts/integration/synchronous-vs-asynchronous-connector.md)
- [Software Connector Classification](https://arc.fuet.ch/concepts/integration/classification-of-integration-patterns.md)

## Sources

- [Message Channel - Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageChannel.html) — enterpriseintegrationpatterns.com, accessed 2026-11-09
- [What do you mean by “Event-Driven”?](https://martinfowler.com/articles/201701-event-driven.html) — martinfowler.com, accessed 2026-11-08
- [Messaging - Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/Messaging.html) — enterpriseintegrationpatterns.com, accessed 2026-11-09
- [Publish-Subscribe Channel - Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/PublishSubscribeChannel.html) — enterpriseintegrationpatterns.com, accessed 2026-11-08
