Паттерн Revealing Module — «JavaScript Design Patterns, 2017» Эдди Османи. Перевод: часть 4

Паттерн Revealing Module (паттерн выявления модулей, он же — паттерн открытый модуль, он же — паттерн раскрывающийся модуль)

Теперь, когда мы немного знакомы с паттерном модуля, давайте посмотрим на его улучшенную версию — паттерн выявления модулей от Христиана Хейлмана.

Модель раскрывающегося модуля возникла, когда Хейлманн был расстроен тем фактом, что ему приходится повторять название основного объекта при вызове публичного метода извне. Ему также не нравилось требование Module Pattern использования объекто-литеральной определения объектов в момент, когда он хотел сделать что-то публичным.

Результатом его работы стал обновленный паттерн, в котором мы определяем все наши методы и переменные в приватной области и возвращаем литерал объекта с ссылками на приватную функциональность, которую мы хотели раскрыть для использования извне.

Пример паттерна выявления модулей приведен ниже:

Патерн также можно использовать для открытия приватных функций и свойств с более явной схемой именования:

Преимущества паттерна Revealing Module

Паттерн позволяет сделать синтаксис наших скриптов более структурированным. Также мы получаем более читабельное окончание нашего модуля, в котором содержатся ссылки на наши приватные методы и переменные.

Недостатки паттерна Revealing Module

Если приватная функция модуля использует общедоступную функцию того же модуля, эту общедоступную функцию нельзя переопределить извне. Даже если попытаться это сделать, приватная функция всё равно будет обращаться к исходной приватной реализации общедоступной функции. То же самое касается и попытки изменения извне общедоступной переменной, доступ к которой даёт API модуля.

Вышесказанное определяет, что объекты созданные с помощью паттерна Revealing Module, являются более хрупкими, чем те, что созданы с помощью обычного модуля.