Слайд 2Framework — основа или каркас приложения
Слайд 3Приложение
Яндекс
Underscore
jQuery
Backbone
common.js
Слайд 7Дробим на модули чтобы:
улучшить архитектуру фреймворка;
упростить командную разработку и тестирование;
из «большого» фреймворка
можно собрать «маленький» только с нужными функциями.
Слайд 9Тестирование
Автоматическое дешевле и проще ручного.
Дает возможность покрыть больше различных случаев.
Не заменимо при
рефакторинге.
Слайд 11Jasmine
describe(“Test case", function() {
it('should be true', function() {
expect(App.method()).toEqual(true);
});
});
Слайд 14Точки расширения функциональности
Слайд 15События
$(root).on(“tableWasFilled.module1”,
function () { alert(“Filled”); });
$({a: 1}).on(“tableWasFilled.module1”,
function () { alert(“Filled”); });
Слайд 16Функции обратного вызова
Можно передать только одну функцию обратного вызова.
Перед вызовом нужно проверить,
что передали именно функцию.
Явное связывание модулей.
Слайд 17Отложенные объекты
Можно зарегистрировать сколько угодно функций-обработчиков.
Объект может изменить состояние только один раз.
Явное
связывание модулей.
Мало кто понимает как это работает!
Слайд 18Стиль кода
Программы пишут,
чтобы их читать.
Слайд 19Стиль кода
Douglas Crockford: “Programming Style & Your Brain”
JSLint в качестве валидатора
Code Guidelines
для вашей команды
Слайд 20Рефакторинг
Не боимся трогать то,
что работает.
Слайд 25Чеклист
Модульность
Тесты
Точки расширения
Хороший стиль кода
Документация
Слайд 26Решил сделать «идеальный» фреймворк.
http://bit.ly/app-skeleton
Слайд 27Создаем пространство имён
App.namespace(“App.Module”, {
method: function () {
…
}
});
Слайд 28Хранилище данных модуля
App.defaults(“App.Module”, {
text: “Hello, world!”,
enabled: true,
});
Слайд 29Доступ к данным
var data = App.defaults(“App.Module”);
var enabled = App.defaults(“App.Module”,
“enabled”);
var text = App.defaults(“App.Module”,
“error.text”,
“Default text”);
Слайд 30Описание зависимостей
App.register({
name: “module1”,
path: [
“/js/module1.js”, “/css/module1.css”
],
requires: [“jQuery”, “module2”]
});
Слайд 31Загрузка модуля
App.load({
load: App.calculate(“module1”);
complete: function () {
$(App.Module.init);
}
});
Слайд 32Загрузка обязательных ресурсов
App.bootstrap({
load: “jquery-1.7.1.min.js”,
complete: function () {
// в этом месте уже можно
декорировать // страницу с применением jQuery.
}
});
Слайд 33http://bit.ly/app-skeleton
Модульность
Тесты
Точки расширения
Хороший стиль кода
Документация