SlideShare a Scribd company logo
JavaScript
Design Patterns
overview
Ксения Редунова
Что такое паттерны?
По словам Кристофера Александра,
“любой паттерн описывает задачу, которая снова и
снова возникает в нашей работе, а также принцип
ее решения, причем таким образом, что это
решение можно потом использовать миллион раз,
ничего не изобретая заново”
Категории паттернов
проектирования
• Порождающие шаблоны (Creational)
o Создание объектов
• Структурные шаблоны (Structural)
o Изменяют интерфейс и функциональность уже существующих
объектов
o Решают проблемы организации больших структур
• Поведенческие шаблоны (Behavioral)
o Взаимодействие объектов
Creational
• Singleton
o Module
• Factory
• Abstract
factory
• Builder
• Prototype
• Lazy
initialization
• Multiton
• Object pool
• RAII
Structural
• Facade
• Decorator
• Adapter
• Bridge
• Composite
• Front Controller
• Flyweight
• Proxy
Behavioral
• Observer
(Pub/Sub)
• Mediator
• Iterator
• Chain of
responsibility
• Command
• Interpreter
• Memento
• Servant
• Strategy
• …
MV*
Недостатки
• Нет подхода, определяющего, когда
и как применять те или иные
паттерны
Преимущества
• Паттерны способствуют повторному
использованию, решая общие проблемы
дизайна
• Применение паттернов облегчает
документирование кода
• Если программист знаком с паттернами, то ему
будет легче поддерживать такой код
Антипаттерны
Andrew Koenig (1995):
• Describe a bad solution to a particular problem
which resulted in a bad situation occurring
• Describe how to get out of said situation and how
to go from there to a good solution
• Глобальные переменные
• Передача строк в setTimeout() или setInterval()
(это вызывает eval())
• Изменение прототипа Object
• Внедрение JavaScript непосредственно в html
код
• document.write вместо document.createElement
Антипаттерны
• The JavaScript Code Quality Tool
• by Douglas Crockford
• http://jslint.com
o blocks and brackets if (a == b) { ... }
o put break in switch after each case
o use === instead of ==
o for (name in object) {
if (object.hasOwnProperty(name)) { .... } }
o The eval function is the most misused feature of JavaScript
JSLint
Singleton
единственный объект
var mySingleton = {};
Singleton
Настоящий singleton работает так:
var my1 = new Single();
var my2 = new Single();
>>> my1 === my2
true
Но в JavaScript все не так просто 
Singleton
Проблема: Свойство instance - public
Singleton
Замыкание (closure)
• Внутренняя функция имеет доступ к
переменным и аргументам внешней функции
• Эти переменные существуют, пока существует
ссылка на внутреннюю функцию
Singleton
Chaining
шаблон цепочек
Достоинства:
• Компактный код
• Маленькие функции
Недостатки:
• Код сложнее в отладке
Роберт Мартин (“Clean Code”): «Крушение поезда»
Chaining
шаблон цепочек
Модуль
• Использует парадигму Singleton
• Использует замыкания и самовызывающиеся
функции (IIFE)
• Не засоряет глобальное пространство имен
• Поддерживает приватные данные
• Хорошо масштабируется по мере роста
приложения
“Anything can be defined as a reusable module”
- Zakas.
Immediately-invoked
function expression
самовызывающиеся функции
(function () {
// all vars and functions are in this scope only
// and access to all globals
}());
Преимущество: ничто не глобально
Проблема: это анонимный модуль – нет доступа
снаружи (callbacks, обработчики событий)
Модуль
Импортируем глобальные переменные
Расширяем модуль
Revealing Module Pattern
шаблон открытия модуля
Модификация модуля, когда все методы
являются частными, а в конце определения
модуля принимается решение, каким из
них следует стать общедоступными
JavaScript design patterns overview
Фабрика
• Выполнение повторяющихся операций,
необходимых при создании похожих объектов
• Способ создания объектов без необходимости
знать их тип (класс)
Фабрика
Конструктор Object()
Фасад
• Фасад делает нашу жизнь проще 
• Сложную логику легко скрыть за фасадными
методами
• Удобен для реализации кроссбраузерных
решений
Фасад
MV*: MVC, MVP, MVVM
MVC
MV*
MVP
Presenter извлекает данные из Модели и
форматирует их для отображения в
Виде. Все взаимодействие проходит
только через Presenter
MVVM
Модель вида (ViewModel)
• Команды для Вида, чтобы влиять на
Модель
• обертка данных из Модели, которые
подлежат связыванию (data binding)
Популярные паттерны
• Mixin
• Observer/PubSub
• Mediator
• Decorator
Полезные советы
“The secret to building large apps is never build large
apps. Break your applications into small pieces. Then,
assemble those testable, bite-sized pieces into your
big application” - Justin Meyer.
“The more tied components are to each other, the
less reusable they will be, and the more difficult it
becomes to make changes to one without
accidentally affecting another” - Rebecca Murphey.
Литература
• JavaScript Patterns by Stoyan Stefanov
• JavaScript: The Good Parts by Douglas Crockford
• Writing Maintainable JavaScript by Nicholas Zakas
• Patterns for Large-Scale JavaScript Application
Architecture by Addy Osmani
• Learning JavaScript Design Patterns by Addy
Osmani
• http://jsdesignpatterns.com
• http://shichuan.github.io/javascript-patterns/
• and many more 
Спасибо за внимание!
Ксения Редунова
@Katidotk

More Related Content

PDF
MarionetteJS. Shall we dance?
PDF
Backbone.js Профилактика сколиоза
PDF
Паттерны проектирования
PPT
AngularJS basics & theory
PDF
CodeFest dirty facts about AngularJS
PPTX
AngularJS. Введение и простые примеры для понимания
PDF
VIPER architecture
PPTX
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
MarionetteJS. Shall we dance?
Backbone.js Профилактика сколиоза
Паттерны проектирования
AngularJS basics & theory
CodeFest dirty facts about AngularJS
AngularJS. Введение и простые примеры для понимания
VIPER architecture
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js

What's hot (18)

PPTX
Backbone lesson 1
PPTX
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
PDF
Реактивный фронтенд фреймворк для людей (Константин Комелин)
PDF
Как и зачем мы тестируем UI
PDF
Backbone js
PDF
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
PDF
Bootstrap3 basics
PPTX
Сложные социальные приложения с помощью JS MVC фреймворков
PDF
Abf
PDF
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
PPTX
ASP.NET MVC
PPTX
Антон Валюх - Использование паттерна Mvvm в android
PDF
И снова разработка под iOS. Павел Тайкало
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PPTX
knockout.js
PDF
Selenium. Stas Kuzminov
PDF
Vue.js - реактивный фронтенд фреймворк для людей
PPTX
Backbone lesson 1
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Как и зачем мы тестируем UI
Backbone js
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Bootstrap3 basics
Сложные социальные приложения с помощью JS MVC фреймворков
Abf
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
ASP.NET MVC
Антон Валюх - Использование паттерна Mvvm в android
И снова разработка под iOS. Павел Тайкало
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
knockout.js
Selenium. Stas Kuzminov
Vue.js - реактивный фронтенд фреймворк для людей
Ad

Viewers also liked (10)

PPTX
Introduction to Design Patterns in Javascript
PPTX
Design patterns in javascript
PDF
OO Inheritance - Not Always Evil - Refactoring to Open-Closed with Inheritance
PPTX
Javascript Design Patterns
PDF
"Creating Pattern Languages for Human Actions" @ PUARL2016
PDF
Workshop 2: JavaScript Design Patterns
PDF
Applying Design Patterns in Practice
PDF
JavaScript Patterns
PDF
Javascript Module Patterns
PDF
Javascript Design Patterns
Introduction to Design Patterns in Javascript
Design patterns in javascript
OO Inheritance - Not Always Evil - Refactoring to Open-Closed with Inheritance
Javascript Design Patterns
"Creating Pattern Languages for Human Actions" @ PUARL2016
Workshop 2: JavaScript Design Patterns
Applying Design Patterns in Practice
JavaScript Patterns
Javascript Module Patterns
Javascript Design Patterns
Ad

Similar to JavaScript design patterns overview (20)

PPTX
JavaScript Design Patterns overview by Ksenia Redunova
PDF
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
PPTX
Практические аспекты разработки ПО #3
PPT
Подробная презентация JavaScript 6 в 1
PDF
JavaScript Базовый. Занятие 04.
PPT
Подробная презентация JavaScript 6 в 1
PDF
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
PDF
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
PDF
Общие темы. Тема 02.
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
PPTX
JavaScript: хороший тон клиентской разработки
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
PDF
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
PDF
ES2015+: давно пора!
ODT
шаблоны проектирования
PPTX
введение в Javascript
PPTX
Pavel Rumantsev - Java Script
PDF
C# Web. Занятие 02.
PDF
Фреймворк-невиидмка
JavaScript Design Patterns overview by Ksenia Redunova
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
Практические аспекты разработки ПО #3
Подробная презентация JavaScript 6 в 1
JavaScript Базовый. Занятие 04.
Подробная презентация JavaScript 6 в 1
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
Общие темы. Тема 02.
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
JavaScript: хороший тон клиентской разработки
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
ES2015+: давно пора!
шаблоны проектирования
введение в Javascript
Pavel Rumantsev - Java Script
C# Web. Занятие 02.
Фреймворк-невиидмка

JavaScript design patterns overview