мастер-класс



мастер-класс

0 0


backbone-master-class-presentation


On Github tsareg / backbone-master-class-presentation

мастер-класс

Автор Константин Цареградский

Backbone.js gives structure to web applications by providing

  • models with key-value binding and custom events,
  • collections with a rich API of enumerable functions,
  • views with declarative event handling,

and connects it all to your existing API over a RESTful JSON interface.

Немного фактов

http://backbonejs.org/

Библиотека, а не фреймворк

Развивается с 2010 года

Open-source, MIT лицензия

Автор Jeremy Ashkenas (https://github.com/jashkenas), создатель CoffeeScript и Underscore.js

Компании и сайты, использующие Backbone

Зависимости

  • Underscore.js / Lo-Dash
  • jQuery / Zepto
  • теоретически есть возможность использовать Backbone без этих зависимостей

Идея приложения

Вспомогательные инструменты

     Bower

Разобъем наше будущее приложение на составляющие части

Backbone & MVC pattern

Backbone.View сочитает в себе свойства как контроллера, так и представления.

По-этому обычно о Backbone говорят как о MV* (Model-View-Whatever) библиотеке.

Также иногда Backbone рассматривают как реализацию паттерна MVP.

Single-page applications (SPA)

Это веб-приложение, которое выполняется непосредственно на стороне клиента в Web-браузере, написанное на комбинации из HTML, JavaScript и CSS. При переходи с одной "страницы" приложения на другую полная перезагрузка страницы не происходит. Это позволяет увеличить "отзывчивость" приложения.

Примеры типичных SPA - Gmail, Vkontakte, Twitter, Instagram.

Для эмуляции истории в браузере используется location.hash или HTML5 History pushState.

Настройка и кастомизация

  • Возможно использовать любой template engine - Handlebars, Underscore templating, Mustache, Jade etc.
  • Возможно глобально переопределить функцию работы с AJAX (для REST запросов) - Backbone.ajax. Функция должна быть совместима с jQuery.ajax, если используется стандартный Backbone.sync
  • Возможно глобально переопределить функцию синхронизации модели/коллекции с сервером - Backbone.sync. Таким образом можно реализовать работу с localStorage, RPC и т.д. вместо стандартного REST.

Выводы: чем хорош Backbone

  • Стабильный код
  • Гибкость и расширяемость - девиз "Всегда есть более одного пути сделать что-то"
  • Подходит для различных применений - как для маленьких виджетов, так и для приложений энтерпрайз уровня
  • Большое коммьюнити, много плагинов и расширений
  • Возможность использовать только некоторые части библиотеки (например, только коллекции и модели)
  • Легкая интеграция с другими популярными фреймворками (React, Knockout)
  • Легко использовать с AMD
  • Можно использовать любой template engine, либо не использовать вообще

Недостатки "чистого" Backbone

  • Отсутвует понятие "приложения"
  • Нет автоматического memory management
  • Нет CollectionView
  • Нет возможности работать с регионами и общим лейаутом приложения
  • Нет вложенных моделей и коллекций
  • Backbone.View в своей изначальной концепции - медленный
  • У Backbone.View нет никакого lifecycle

Для каких приложений подходит Backbone

  • Бекенд организован в виде REST-сервисов
  • Предполагается большой объем логики на уровне моделей
  • Необходимо интегрироваться с другими библиотеками
  • Предполгается много кастомных компонентов

Полезные расширения для Backbone

Фреймворки

Data-binding

LayoutManager

Backbone без jQuery и Underscore

Вложенные модели и коллекции

Undo/Redo и state tracking для моделей

Валидация моделей

Работа с различными storage

Поддержка отношений между моделей

Pagination для коллекций

Дружим Backbone и React

Инструменты для разработки

И десятки других плагинов и расширений на https://github.com/jashkenas/backbone/wiki/Extensions%2C-Plugins%2C-Resources

Вопросы?

Эта презентация доступна по адресу - http://tsareg.github.io/backbone-master-class-presentation

Пример приложения - https://github.com/tsareg/backbone-master-class-sample

Презентация о различных data-binding библиотеках для Backbone - http://tsareg.github.io/Data-binding-for-Backbone.js

Презентация создана с помощью Reveal.js

Спасибо за внимание