SlideShare a Scribd company logo
JavaScript Design Patterns
overview
Ксения Редунова
Шаблоны проектирования
Зачем они нужны?
“In my view, large-scale JavaScript apps are nontrivial
applications requiring significant developer
effort to maintain, where most heavy lifting of data
manipulation and display falls to the browser.”
- Addy Osmani
Что такое паттерны?
По словам Кристофера Александра,
“любой паттерн описывает задачу, которая снова и снова
возникает в нашей работе, а также принцип ее решения,
причем таким образом, что это решение можно потом
использовать миллион раз, ничего не изобретая заново”
Категории паттернов
Порождающие шаблоны (Creational)
Создание объектов
Структурные шаблоны (Structural)
Изменяют интерфейс и функциональность уже
существующих объектов
Решают проблемы организации больших структур
Поведенческие шаблоны (Behavioral)
Взаимодействие объектов
Creational
Singleton
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
Singleton
var mySingleton = {};
Настоящий singleton работает так:
var my1 = new Single();
var my2 = new Single();
>>> my1 === my2
true
Но в JavaScript все не так просто ☺
Singleton
Проблема: Свойство instance - public
Singleton
• Внутренняя функция имеет доступ к переменным и
аргументам внешней функции
• Эти переменные существуют, пока существует ссылка на
внутреннюю функцию
Замыкание (closure)
14
Достоинства:
Компактный код
Маленькие функции
Недостатки:
Код сложнее в отладке
Роберт Мартин (“Clean Code”): «Крушение поезда»
Chaining
Chaining
Использует парадигму Singleton
Использует замыкания и самовызывающиеся функции (IIFE)
Не засоряет глобальное пространство имен
Поддерживает приватные данные
Хорошо масштабируется по мере роста приложения
“Anything can be defined as a reusable module”
- Zakas.
Module
(function () {
// all vars and functions are in this scope only
// and access to all globals
}());
Преимущество: ничто не глобально
Проблема: это анонимный модуль – нет доступа снаружи (callbacks,
обработчики событий)
IIFE
Импортируем глобальные переменные
Расширяем модуль
Module
Модификация модуля, когда все методы являются
частными, а в конце определения модуля
принимается решение, каким из них следует стать
общедоступными
Revealing Module Pattern
21
Фабрика
Выполнение повторяющихся операций, необходимых при
создании похожих объектов
Способ создания объектов без необходимости знать их тип
(класс)
Фабрика
Конструктор Object()
Фасад
Фасад делает нашу жизнь проще 
Сложную логику легко скрыть за фасадными
методами
Удобен для реализации кроссбраузерных
решений
Фасад
Pub/Sub
Backbone Events
on
off
trigger
_.extend(object, Backbone.Events);
27
Pub/Sub
28
MV*: MVC, MVP, MVVM
MVC
MV*
MVP
Presenter извлекает данные из Модели и
форматирует их для отображения в Виде
MVVM
Модель вида (ViewModel, что означает «Model of
View»)
Команды, которыми может пользоваться Вид,
чтобы влиять на Модель
обертку данных из Модели, которые подлежат
связыванию
Полезные советы
“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
Writing Maintainable JavaScript by Nicholas Zakas
Learning JavaScript Design Patterns by Addy Osmani
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 
Ксения Редунова
Thank You!

More Related Content

PDF
DESIGN PATTERNS? EASY!
PPTX
Clean architecture on Android
PDF
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
PDF
Паттерны проектирования
PPTX
User stories and use cases - Клаудия Заика
PDF
20100214 virtualization igotti_lecture01
PDF
Шаблоны проектирования в Magento
PDF
Php spl and design patterns
DESIGN PATTERNS? EASY!
Clean architecture on Android
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Паттерны проектирования
User stories and use cases - Клаудия Заика
20100214 virtualization igotti_lecture01
Шаблоны проектирования в Magento
Php spl and design patterns

Similar to JavaScript Design Patterns overview by Ksenia Redunova (20)

PPTX
JavaScript design patterns overview
PPTX
Практические аспекты разработки ПО #3
PDF
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
PDF
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
PDF
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
PPTX
разработка бизнес приложений (7)
PPTX
Design Patterns for Force.com
PDF
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
PPTX
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
PDF
Общие темы. Тема 02.
PPTX
парадигмы программирования и шаблоны проектирования
ODT
шаблоны проектирования
PDF
Фреймворк-невиидмка
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PPTX
06 Архитектура информационных систем. Паттерны и фреймворки
PDF
Шаблоны проектирования GoF
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
JavaScript design patterns overview
Практические аспекты разработки ПО #3
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
разработка бизнес приложений (7)
Design Patterns for Force.com
"Flux — новый взгляд на старые проблемы" — Сергей Прохоров, MoscowJS 18
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Общие темы. Тема 02.
парадигмы программирования и шаблоны проектирования
шаблоны проектирования
Фреймворк-невиидмка
Компонентный подход: скучно, неинтересно, бесперспективно
06 Архитектура информационных систем. Паттерны и фреймворки
Шаблоны проектирования GoF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Ad

More from Lohika_Odessa_TechTalks (20)

PPTX
OAuth2 Authorization Server Under the Hood
PPTX
Debugging Microservices - key challenges and techniques - Microservices Odesa...
PPTX
Design and Evolution of APIs in Microservice Architecture
PPTX
Micro-frontends – is it a new normal?
PPTX
Multithreading in go
PPTX
Druid - Interactive Analytics At Scale
PDF
DevOps Odessa #TechTalks 21.01.2020
PPTX
Jenkins' shared libraries in action
PPTX
Prometheus: infrastructure and application monitoring in kubernetes cluster
PPT
Architectural peripherals of react by Vadym Zhiltsov
PPTX
React native by example by Vadim Ruban
PPTX
Aws lambda by Leonid Amigud
PPT
Congratulations, you have been promoted to a manager role. You`ve got new pro...
PPT
"Don't touch me and give me my money" or how motivate people who can but don...
PPTX
Docker based Architecture by Denys Serdiuk
PPTX
SparkSpark in the Big Data dark by Sergey Levandovskiy
PPT
Burnout and how to avoid it in your team. Responsible person's issue by Andre...
PPTX
Performance evaluation process as a way to empower your employees and help th...
PPT
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
PPT
" Performance testing for Automation QA - why and how " by Andrey Kovalenko f...
OAuth2 Authorization Server Under the Hood
Debugging Microservices - key challenges and techniques - Microservices Odesa...
Design and Evolution of APIs in Microservice Architecture
Micro-frontends – is it a new normal?
Multithreading in go
Druid - Interactive Analytics At Scale
DevOps Odessa #TechTalks 21.01.2020
Jenkins' shared libraries in action
Prometheus: infrastructure and application monitoring in kubernetes cluster
Architectural peripherals of react by Vadym Zhiltsov
React native by example by Vadim Ruban
Aws lambda by Leonid Amigud
Congratulations, you have been promoted to a manager role. You`ve got new pro...
"Don't touch me and give me my money" or how motivate people who can but don...
Docker based Architecture by Denys Serdiuk
SparkSpark in the Big Data dark by Sergey Levandovskiy
Burnout and how to avoid it in your team. Responsible person's issue by Andre...
Performance evaluation process as a way to empower your employees and help th...
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
" Performance testing for Automation QA - why and how " by Andrey Kovalenko f...
Ad

JavaScript Design Patterns overview by Ksenia Redunova

Editor's Notes

  • #2: пару слов обо мне
  • #3: вы писали spa? scalable, testable, maintainable? что такое large-scale JS apps организация и переиспользование кода (reusability) - DRY
  • #11: singletone - one instance of an object. в отличии от других языков, нам не надо создавать класс, а потом экземпляр.
  • #14: JS не имеет приватных свойств и методов, но мы можем этого добиться - замыкания. Ключ к этому - функции.
  • #15: single - не функция, а результат выполнения функции
  • #18: переменные, объявленные в модуле, видны только в модуле функции ограничивают scope, поэтому функция - контейнер модуля
  • #28: динамическое обновление UI и синхронизация данных использует канал “событий”, по которому общаются Observer & Sender
  • #29: Disadvantages • Checking the integrity of your application can become difficult • Switching a subscriber from one publisher to another can be costly Есть еще Медиатор (диспетчер в аэропорту) • Reduces the communication relationship from "many-to-many" to "many-to-one" • Loose coupling • promotes smaller, reusable components The mediator pattern provides a standard API for modules to use.