Для чего используются фасады?

«Для чего используются фасады?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Фасады — это структурный паттерн проектирования, который предоставляет простой интерфейс к сложной подсистеме, скрывая её внутреннюю сложность. Я использовал его в проектах для упрощения взаимодействия клиентского кода с набором взаимосвязанных классов.

Конкретный пример из моего опыта: У нас была подсистема обработки видео, состоящая из классов VideoDecoder, VideoEncoder, CodecManager, NetworkStreamer. Вместо того чтобы инициализировать и координировать все эти объекты в каждом месте бизнес-логики, я создал фасад VideoProcessingFacade.

public class VideoProcessingFacade {
    private VideoDecoder decoder;
    private VideoEncoder encoder;
    private CodecManager codecManager;

    public VideoProcessingFacade(CodecProfile profile) {
        this.codecManager = new CodecManager(profile);
        this.decoder = new VideoDecoder(codecManager);
        this.encoder = new VideoEncoder(codecManager);
    }

    // Простой метод, скрывающий сложность
    public void transcodeAndStream(String inputFile, String outputUrl) {
        VideoData rawData = decoder.decodeFile(inputFile);
        VideoData transcodedData = encoder.transcode(rawData);
        NetworkStreamer.stream(transcodedData, outputUrl);
    }
}

// Использование в клиентском коде становится тривиальным:
VideoProcessingFacade videoFacade = new VideoProcessingFacade(CodecProfile.H264);
videoFacade.transcodeAndStream("input.mov", "rtmp://stream-server/live");

Преимущества: Уменьшает связность, делает код чище и облегчает возможную замену всей подсистемы в будущем.