> Какие архитектурные шаблоны существуют (JavaScript)
Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: TrendTech
Стек: Node.js, JavaScript
> Пример ответа
Короткий ответ
Архитектурные шаблоны - это проверенные решения для организации кода и взаимодействия между компонентами. Основные: MVC (Model-View-Controller), MVP (Model-View-Presenter), MVVM (Model-View-ViewModel), Flux/Redux (однонаправленный поток данных), модульный шаблон (модули с инкапсуляцией), микросервисная архитектура (для бэкенда), event-driven и layered architecture. Выбор зависит от масштаба проекта, требований к тестируемости и сложности бизнес-логики.
Подробное объяснение
Архитектурные шаблоны решают проблему организации кода на уровне приложения, а не отдельных функций. Для frontend-разработки на JavaScript/Node.js актуальны:
- MVC - разделение на модель (данные/бизнес-логика), представление (UI) и контроллер (обработка ввода). Классика для серверного рендеринга, но на фронтенде часто приводит к "толстым" контроллерам.
- MVP - вариант MVC, где Presenter управляет логикой, а View пассивно отображает данные. Упрощает тестирование, так как View можно замокать.
- MVVM - популярен в Angular и Vue через двустороннее связывание данных. ViewModel автоматически синхронизирует состояние с View, уменьшая boilerplate.
- Flux/Redux - однонаправленный поток данных: action → dispatcher → store → view. Решает проблему предсказуемости состояния в сложных UI. Redux - самая распространённая реализация.
- Модульный шаблон - инкапсуляция через IIFE или ES modules. Каждый модуль имеет чёткую ответственность и явные зависимости.
- Event-driven - компоненты общаются через события (EventEmitter, pub/sub). Используется в Node.js (EventEmitter) и для слабосвязанных систем.
- Layered architecture - разделение на слои (например, presentation, business logic, data access). Хорошо подходит для Node.js-приложений с Express/Koa.
На практике
Для frontend-приложений на JavaScript чаще всего комбинируют шаблоны. React использует компонентный подход с однонаправленным потоком (Flux-подобный через Redux или Context API). Vue и Angular - MVVM с реактивностью. В Node.js популярна layered architecture: маршруты → middleware → контроллеры → сервисы → репозитории.
При выборе шаблона учитывай:
- Масштаб - для простых страниц хватит модульного подхода, для SPA нужен Flux/Redux.
- Тестируемость - MVP и MVVM легче тестировать, чем MVC.
- Сложность бизнес-логики - чем сложнее, тем больше нужна чёткая слоистая архитектура.
- Командная работа - строгие шаблоны (Redux, layered) упрощают онбординг.
Пример кода
JAVASCRIPT// Flux-подобный шаблон с Redux// Actionconst ADD_TODO = 'ADD_TODO';const addTodo = (text) => ({ type: ADD_TODO, payload: text });// Reducerconst todosReducer = (state = [], action) => {switch (action.type) {case ADD_TODO:return [...state, { id: Date.now(), text: action.payload, completed: false }];default:return state;}};// Storeconst store = createStore(todosReducer);// View (React component)const TodoList = () => {const todos = useSelector(state => state);const dispatch = useDispatch();return (<ul>{todos.map(todo => <li key={todo.id}>{todo.text}</li>)}<button onClick={() => dispatch(addTodo('New task'))}>Add</button></ul>);};
Как отвечать на собеседовании
Начни с краткого определения и перечисли основные шаблоны. Затем выбери 2-3 наиболее релевантных для твоей специализации (frontend/Node.js) и объясни их trade-off. Приведи пример из реального проекта, где ты применял шаблон и почему. Если спросят про конкретный шаблон, опиши его структуру, преимущества и недостатки. Не пытайся перечислить все шаблоны - лучше глубоко раскрыть несколько.
Что проверяет интервьюер
- Понимание разницы между архитектурным шаблоном и паттерном проектирования (например, MVC vs Singleton).
- Умение выбирать шаблон под задачу, а не использовать везде один.
- Знание конкретных реализаций в JavaScript/Node.js (Redux, EventEmitter, модули).
- Понимание trade-off: тестируемость, производительность, сложность поддержки.
- Опыт применения на практике, а не только теория.
Типичные ошибки
- Путать архитектурные шаблоны с паттернами проектирования (например, называть Singleton архитектурным шаблоном).
- Называть только MVC, игнорируя современные подходы (Flux, MVVM).
- Не упоминать контекст - для чего шаблон подходит, а для чего нет.
- Приводить примеры только из учебников, без реального опыта.
- Забывать про Node.js - для серверной части актуальны layered и event-driven шаблоны.
> Похожие задачи по JavaScript
Как хранятся коллекции по иерархии - как объекты или ссылки
Когда требуется денормализация базы данных и хранение одних и тех же данных в разных таблицах или коллекциях
Применял ли ты архитектурные шаблоны в коде
Как ты пришел к руководству командой
> Похожие задачи по frontend
Как проходят этапы разработки: спринты, дели, ретроспективы
Как хранятся коллекции по иерархии - как объекты или ссылки
Применял ли ты архитектурные шаблоны в коде
В каком направлении хочешь развиваться
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью