Непомнящих Егор, Web-developer, ISS Art.
JS, Java, Iron Maiden. Практически вся моя жизнь связана так или иначе с IT — с 11 класса и до 5 курса я лидировал на олимпиадах, но погрузился в профессию уже на работе в ISS Art’е. Мною реализованы ряд интересных проектов — от мелких поделок на гитхабе, до крупных бизнес-порталов, системы мониторинга и прогнозирования состояния оборудования, векторного графического редактора для Flash-версии Google Maps, сложного плагина для SketchUp на Ruby и Unity-клиента для просмотра зданий под десктопными и мобильными платформами.
В общем, повидал всякие front-end’ы, не только Web. Буду рад поделиться опытом с коллегами по цеху. В докладе расскажу о том, как сократить объем кода вашего front-end'а на 7%.
2. О себе 2005-2010 - ОмГУ ИМИТ
с 2008 - ИСС Арт
Специализация: JavaScript
Умения: TypeScript, Java, Scala, Unity 3D, PHP, Ruby, ...
Собственный MV-фреймворк (jWidget)
Тимлид и эксперт
Фанат ООП и Iron Maiden
5. Что такое агрегация и
осведомленность
Параграф 1.6 - Сравнение структур времени
выполнения и времени компиляции.
Использующий
объект
Использованный
объект
Агрегирующий
объект
Агрегируемый
объект
8. Агрегация в C++
class Department;
class University {
private:
Department faculty[20];
};
Агрегация по значению
9. Агрегация в C++
class Engine;
class Car {
private:
Engine* engine;
public:
Car() {
engine = new Engine();
}
virtual ~Car() {
delete engine;
}
};
Агрегация по ссылке
24. 1. Простое обновление объекта
Если подобъект, который хочется
заагрегировать в объекте, с ходом времени
пересоздается, поместите его в агрегирующее
свойство.
31. 2. Простая отмена операции
Если в момент уничтожения или смены
состояния объекта может выполняться
некоторая операция, но вы не знаете этого
наверняка, то для ее отмены следует
воспользоваться агрегирующим свойством.
38. 3. Массовое уничтожение объектов
initContent() {
this.objects = this.factory.createObjects();
}
doneContent() {
this.objects.forEach((obj) => obj.destroy());
}
class Factory {
createObjects() {
return [ new Object1(), new Object2(), new Object3() ];
}
}
39. 3. Массовое уничтожение объектов
Если объект вызовом некоторой функции
провоцирует создание множества объектов, то
функции следует возвращать один объект,
агрегирующий в себе все эти объекты.
40. 3. Массовое уничтожение объектов
refreshContent() {
this.objects.set(this.factory.createObjects());
}
class Factory {
createObjects() {
var objects = new JW.Class();
objects.own(new Object1());
objects.own(new Object2());
objects.own(new Object3());
return objects;
}
}
42. 4. Уничтожение драйвера объекта
Драйвер объекта - это объект, обеспечивающий
его актуальность.
43. 4. Уничтожение драйвера объекта
Пример: динамическая смена цветовой схемы приложения
Основная схема Шоколадная схема
Цвет "normal"
Цвет "marginal"
Цвет "critical"
currentScheme
44. 4. Уничтожение драйвера объекта
Пример: динамическая смена цветовой схемы приложения
Основная схема Шоколадная схема
Цвет "normal"
Цвет "marginal"
Цвет "critical"
currentScheme
45. 4. Уничтожение драйвера объекта
Пример: динамическая смена цветовой схемы приложения
Основная схема Шоколадная схема
Цвет "normal"
Цвет "marginal"
Цвет "critical"
currentScheme
46. 4. Уничтожение драйвера объекта
Пример: динамическая смена цветовой схемы приложения
Основная схема Шоколадная схема
Цвет "normal"
Цвет "marginal"
Цвет "critical"
currentScheme
47. 4. Уничтожение драйвера объекта
class ColorScheme {
colors: {[key: string]: Color};
}
class ColorSchemeManager {
currentScheme: ColorScheme;
getCurrentColor(key: string): Color {
return this.currentScheme.colors[key];
}
}
48. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string): JW.Property<Color> {
var color = new JW.Property<Color>();
color.set(this.currentScheme.get().colors[key]);
this.currentScheme.changeEvent.bind(() => {
color.set(this.currentScheme.get().colors[key]);
});
return color;
}
}
// Где-то в клиенте
var color = manager.getCurrentColor('marginal');
this.own($('.color-box').jwcss('background-color', color));
49. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string): JW.Property<Color> {
var color = new JW.Property<Color>();
color.set(this.currentScheme.get().colors[key]);
this.own(this.currentScheme.changeEvent.bind(() => {
color.set(this.currentScheme.get().colors[key]);
}));
return color;
}
}
// Где-то в клиенте
var color = manager.getCurrentColor('marginal');
this.own($('.color-box').jwcss('background-color', color));
50. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string, owner): JW.Property<Color> {
var color = new JW.Property<Color>();
color.set(this.currentScheme.get().colors[key]);
owner.own(this.currentScheme.changeEvent.bind(() => {
color.set(this.currentScheme.get().colors[key]);
}));
return color;
}
}
// Где-то в клиенте
var color = manager.getCurrentColor('marginal', this);
this.own($('.color-box').jwcss('background-color', color));
51. 4. Уничтожение драйвера объекта
Если функция возвращает объект, который
имеет свой драйвер, заагрегируйте этот
драйвер в самом объекте.
52. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string): JW.Property<Color> {
var color = new JW.Property<Color>();
color.set(this.currentScheme.get().colors[key]);
this.currentScheme.changeEvent.bind(() => {
color.set(this.currentScheme.get().colors[key]);
});
return color;
}
}
// Где-то в клиенте
var color = manager.getCurrentColor('marginal');
this.own($('.color-box').jwcss('background-color', color));
53. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string): JW.Property<Color> {
var color = new JW.Property<Color>();
color.set(this.currentScheme.get().colors[key]);
color.own(this.currentScheme.changeEvent.bind(() => {
color.set(this.currentScheme.get().colors[key]);
}));
return color;
}
}
// Где-то в клиенте
var color = this.own(manager.getCurrentColor('marginal'));
this.own($('.color-box').jwcss('background-color', color));
54. 4. Уничтожение драйвера объекта
class ColorSchemeManager {
currentScheme = new JW.Property<ColorScheme>();
getCurrentColor(key: string) {
return this.currentScheme.$$mapValue(
(scheme) => scheme.colors[key]);
}
}