dump-2013 frontend - Принципы разработки поддерживаемых и...

107
Принципы разработки гибких и поддерживаемых интерфейсов Вася Аксёнов @outring

Upload: it-people

Post on 26-Dec-2014

2.067 views

Category:

Documents


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Принципы разработки гибких и поддерживаемых интерфейсов

Вася Аксёнов@outring

Page 2: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Разработка VS. Интерфейсы

Page 3: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

3

РазработкаРеализация — абстрактные сущности

Page 4: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

4

ИнтерфейсыРеализация — визуальное представление

Page 5: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

5

В чём разница?Явность правил взаимодействия

Предопределённость сценариев взаимодействия и сущностей

Page 6: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Гибкость и поддерживаемость

Page 7: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

7

ГибкостьВозможность создания новых частей интерфейса без необходимости внесения изменений в ранее созданные части

Page 8: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

8

ПоддерживаемостьВозможность безопасного изменения интерфейса

Page 9: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

1 SRPПринцип единственной ответственности

Page 10: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

10

Принцип единственной ответственности

Каждая сущность имеет только одну обязанность

Сущность должна иметь только одну причину измениться

Page 11: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

11

Скачать

Page 12: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

12

Кнопка.download-button {! padding: 0 20px;}

Page 13: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

13

Размеры.download-button {! width: 230px;! padding: 0 20px;}

Page 14: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Позиционирование.download-button {! position: absolute;! left: 50%;! top: 50%;

! width: 230px;! margin-top: -65px;! margin-left: -135px;! padding: 0 20px;} 14

Page 15: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

−padding.download-button {! position: absolute;! left: 50%;! top: 50%;

! width: 230px;! margin-top: -65px;! margin-left: -135px;! padding: 0 20px;} 15

Page 16: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

16

Скачать

Page 17: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Скачать

17

Page 18: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

МинусыНеобходимость изменения для переиспользования

Сложность понимания ответственности

Небезопасность изменений

18

Page 19: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

19

РешениеРаспределение ответственности по разным элементам

Или классам

Page 20: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

20

Скачать

Page 21: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

21

Функциональное разделение по элементам

Только одна причина изменения сущности

Page 22: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

2 Предсказуемые раскладки

Page 23: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Системы позиционированияС высокой степенью самоорганизации

С низкой

23

Page 24: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Низкая степень самоорганизации<div style="position: absolute;"></div><div style="position: absolute;">! <div style="position: absolute;"></div></div>

24

Page 25: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

25

Page 26: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

26

Низкая степень самоорганизации+ Стабильность − Трудоёмкость

Page 27: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

27

Высокая степень самоорганизации<div>! <div style="float: right;"></div>! <span>...</span>! <div>! ! <span>...</span>! </div></div><div>! <span>...</span><span>...</span></div>

Page 28: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

28

Page 29: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

29

Высокая степень самоорганизации+ Простота использования

+ Большие возможности

− Сложность поддержки

− Непредсказуемость

Page 30: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Потоковая система позиционирования

Page 31: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

31

Создать Изменить Удалить Навсегда

Page 32: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Панель<div class="panel">! <button>Создать</button>! <button>Изменить</button>

! <button>Удалить</button>! <input type="checkbox">! <label>Навсегда</label></div>

32

Page 33: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

33

Входящие ▼ Переместить

Page 34: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

34

Компонент<div class="mover">! <select>! ! <option>Входящие</option>! ! <option>Исходящие</option>! ! ...! </select>! <button>Переместить</button></div>

Page 35: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

35

Создать Изменить Удалить НавсегдаВходящие ▼ Переместить

Page 36: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

36

Интеграция<div class="panel">! ...! <button>Изменить</button>! <div class="mover">! ...! </div>! <button>Удалить</button>! ...</div>

Page 37: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

37

Создать Изменить

Удалить Навсегда

Входящие ▼ Переместить

Page 38: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

38

Субъекты контекста являются объектами того же контекста и наоборот

Page 39: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Субъект создаёт контекст

Объект находится в контексте

39

Page 40: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

40

Создать Изменить Удалить НавсегдаВходящие ▼ Переместить

Page 41: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

41

Создать Изменить

Удалить Навсегда

Входящие ▼ Переместить

Page 42: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

42

Создать Изменить

Удалить Навсегда

Входящие ▼ Переместить

Page 43: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

РешениеРазделение субъекта и объекта контекста

43

Page 44: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

CSS3 Flexible Box Layout

Page 45: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Включение Flexbox.panel {! display: flex;}

45

Page 46: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

46

Создать Изменить Удалить НавсегдаВходящие ▼ Переместить

Page 47: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Направление.panel {! display: flex;! flex-direction: column; /** @default row */}

47

Page 48: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

48

Создать

Изменить

Удалить

Навсегда

Входящие ▼ Переместить

Page 49: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

49

Родитель контролирует поведение своих детей

Page 50: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Поддержка браузерами 70%

50caniuse.com

Page 51: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

.horizontal-box > * {! float: left;}

.vertical-box > * {! display: block;! width: auto;}

51

Альтернатива

Page 52: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Панель<div class="panel horizontal-box">! ...! <button>Изменить</button>! <div class="mover horizontal-box">! ...! </div>! <button>Удалить</button>! ...</div>

52

Page 53: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Сетки

Page 54: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

54

CSS сетки<div class="container-12">! <div class="grid-3"></div>! <div class="grid-3"></div>! <div class="grid-3"></div>! <div class="grid-3"></div></div>

Page 55: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

55

grid-3 grid-3 grid-3 grid-3

Page 56: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

56

−модуль<div class="container-12">! <div class="grid-3"></div>! <div class="grid-3"></div>! <div class="grid-3"></div>! <div class="grid-3"></div></div>

Page 57: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

57

grid-3 grid-3 grid-3

Page 58: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

58

РешениеНезависимость модулей

Page 59: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

CSS3 Grid Layout

Page 60: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

60

news content activity

Page 61: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

HTML<div class="layout">! <div class="news"></div>! <div class="content"></div>! <div class="activity"></div></div>

61

Page 62: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

CSS.layout {! display: grid;! grid-columns: (80px)[12];}

.news {! grid-column: 1;! grid-column-span: 3;}

.content {! grid-column: 4;! grid-column-span: 6;}

.activity {! grid-column: 10;! grid-column-span: 3;}

62

Page 63: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

–news<div class="layout">! <div class="news"></div>! <div class="content"></div>! <div class="activity"></div></div>

63

Page 64: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

64

content activity

Page 65: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

65

Поддержка браузерами?

Page 66: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

<div class="g-12">! <div class="g-col-1 g-span-3 news"></div>! <div class="g-col-3 g-span-6 content"></div>! <div class="g-col-10 g-span-3 activity"></div></div>

66

Альтернатива

anygrid.net

Page 67: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Родитель контролирует поведение своих детей

Элементы должны быть независимы друг от друга

67

Page 68: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

3 Явное наложение

Page 69: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

69

Page 70: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

70

z-index: 1

Page 71: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

71

z-index: 1

Page 72: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

72

z-index: 1

z-index: 1 z-index: 1

z-index: 1

Page 73: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий
Page 74: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Расслоение z-index по назначению

0...128...256 74

Решение?

}}контент

диалоги и попапы

Page 75: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Контекст наложенияКорневой элемент

Спозиционированный элемент c z-index ≠ auto

Элементы с opacity < 1

75

Page 76: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

z-index локален для каждого контекста наложения

76

Page 77: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

77

z-index: 128

z-index: 1 z-index: 1

z-index: 1

Page 78: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Явные слои и отказ от z-index

78

Решение

Page 79: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Явные слои<body>! <div class="layer" id="background-layer"></div>! <div class="layer" id="content-layer"></div>! <div class="layer" id="overlay-layer"></div>! <div class="layer" id="dialogs-layer"></div>! <div class="layer" id="popups-layer"></div></body>

79

Page 80: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

.layer {! position: relative;! z-index: 1;}

80

Слой

Page 81: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Минимальный наборКонтент

Диалоги

Попапы

81

Page 82: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Явное наложение элементов слоёв

Отказ от z-index как средства функционального наложения

82

Page 83: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

4 Абстрактная реализация

Page 84: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Абстракция

84

Абстракция определяет семантику сущности и позволяет работать с ней без знания деталей реализации

Page 85: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Олдскул кнопкаНикаких градиентов

Никаких радиусов

Никаких псевдоэлементов

Только картинки

85

Page 86: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Минимальная реализация<span class="button download-button">! Скачать! <span class="button-side"></span></span>

86

Page 87: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Минимальная реализация.button {! position: relative;!! display: inline-block;

! padding-left: 20px;}

.button-side {! position: absolute;! left: 100%;!! width: 20px;}

87

Page 88: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

88

Скачать

Page 89: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

89

Скачать Без SMS

Page 90: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Без SMS

90

Скачать

Page 91: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

91

Решение?.button {! position: relative;!! display: inline-block;!! margin-right: 20px;! padding-left: 20px;}

.button-side {! position: absolute;! left: 100%;!! width: 20px;}

Page 92: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

92

Скачать Без SMS

Page 93: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

93

Скачать Без SMS50px

Page 94: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

94

Решение?/** @note К любому margin-right надо прибавить 20! */.button {! position: relative;!! display: inline-block;!! margin-right: 20px;! padding-left: 20px;}

.download-button {! margin-right: 70px; /** 50 + 20 */}

Page 95: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Развитие реализации<span class="button download-button">! <span class="button-content">Скачать</span>! <span class="button-side"></span></span>

95

Page 96: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Развитие реализации.button {! display: inline-block;}

.button-content {! display: inline-block;!! padding-left: 20px;}

.button-side {! display: inline-block;!! width: 20px;}

96

Page 97: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

97

Скачать

Page 98: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

98

Скачать

50px50px

Page 99: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Избавление от отступов.button {! display: inline-block;}

.button-content {! display: inline-block;

! padding-left: 20px;}

.button-side {! display: inline-block;!! width: 20px;}

99

Page 100: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

100

Скачать

50px50px

Page 101: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

101

Решение<span class="button">! <span class="button-left"></span>! <span class="button-right"></span>! <span class="button-content">Скачать</span></span>

Page 102: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Решение.button {! position: relative;!! display: inline-block;}

.button-content {! position: relative;}

.button-left {! position: absolute;! left: 0;! right: 20px;}

.button-right {! position: absolute;! right: 0;!! width: 20px;} 102

Page 103: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

103

Скачать

50px50px

Page 104: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

104

Соответствие семантики и реализации

Реализация по подобию стандартных реализаций

Page 105: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий
Page 106: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий
Page 107: DUMP-2013 Frontend - Принципы разработки поддерживаемых и гибких интерфейсов - Аксенов Василий

Принципы разработки гибких и поддерживаемых интерфейсов

Вася Аксёнов@outring