Перейти к основному содержимому

Паттерн "Фасад" в Java — один метод над подсистемой

Разработчику Архитектору
Теория данных (раздел 3)

Обзор — в структурных паттернах. Здесь — Facade на Java: простой вход в сложную подсистему из нескольких сервисов.

Play ITЗагрузка интерактивного демо…


Задача паттерна

Facade даёт один высокоуровневый API поверх набора классов. Клиент не вызывает десять сервисов по отдельности — он вызывает placeOrder(). Аналогия — пульт от телевизора вместо пайки к плате.

Фасад не добавляет новой бизнес-логики — он координирует существующие компоненты.


Пример — оформление заказа

Код ITЗагрузка примера кода…

OrderFacade facade = new OrderFacade();
String tracking = facade.placeOrder(
"user1", "SKU-100", new BigDecimal("2999.00"), "Москва, ул. Пушкина");

Facade в Spring-приложениях

Типичный сервисный слой (OrderService в Spring Boot REST) — фасад над репозиториями, интеграциями и доменными правилами. Контроллер остаётся тонким; сложность спрятана за одним методом createOrder().

FacadeAdapter
Упрощает свою подсистему для клиентаПереводит чужой интерфейс в нужный контракт
Один новый класс поверх многихОдин класс-переходник к legacy API

Когда применять и риски

Уместен, когда подсистема сложная, а клиенту нужен один сценарий "сделай заказ / импортируй файл / синхронизируй справочник".

Риск — фасад раздувается до God Object с тысячей строк. Дробите на use-case-классы (PlaceOrderFacade, CancelOrderFacade) или пакеты по bounded context.

Фасад и транзакции

В Spring границу транзакции часто вешают на метод фасада/сервиса (@Transactional), чтобы все вызовы подсистем прошли в одном unit of work.


См. также