Паттерн Module (Модуль), теория

Модульность — ключевой принцип в построении архитектуры приложения, помогающий разделить сущности в коде и разложить их по полочкам.

Сама концепция модульности в программировании появилась ещё в 1960-70-х годах. В этом тренажёре рассказывается о ES-модулях, которые появились в языке с выходом ES2015 и постепенно распространились в браузерной и серверной JS-экосистеме. До выхода «нативных» ES-модулей были распространены CommonJS- и AMD-модули, которые сейчас, особенно в контексте браузерного JS, можно считать более не актуальными.

Цель модульного подхода — разделить, декомпозировать большую и сложную программу на отдельные части. Какие от этого подхода преимущества:

Изначально паттерн Module был задуман для реализации принципа инкапсуляции (сокрытие приватных частей внутри модуля, открытие публичных частей наружу потребителю) для классов.

Схема паттерна Module

В JS (ES2015) у модуля тоже могут быть приватные поля и методы (просто живут внутри модуля) и публичные (явно экспортируются из модуля).

module.js
// Приватные поля сокрыты внутри модуля
const privateProperty = "private 123";
const privateMethod = () => "private 123";
const publicProperty = "public 123";
const publicMethod = (text) => console.log(text);
// Публичные поля явно экспортируются наружу
export { publicProperty, publicMethod };
app.js
// Публичные поля импортируются потребителем
import { publicProperty, publicMethod } from "./module";
publicMethod(publicProperty);
// выведет в консоль 'public 123'

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

К недостаткам паттерна можно отнести: