SlideShare une entreprise Scribd logo
1  sur  20
1
©LuxoftTraining2012
Принцип наименьшего
удивления в разработке
API приложения
softblog.violet-tape.ru
Гордиенков Андрей
my@violet-tape.net
2
©LuxoftTraining2014
Почему хорошее API так важно?
 API может быть основным активом
 Быстрое создание экосистемы
 Удержание потребителей
 API является обязательством
 Неудачное API генерирует поток заявок на
поддержку
 Публичное API – навсегда.
Почти.
3
©LuxoftTraining2014
Неочевидность как есть
 API для Альфа-банка. Неофициальное.
var api = new AlfabankAPI();
api.Connect("k000000", "qwerty");
Console.WriteLine("Balance: {0}", api.GetBalance());
var date1 = new DateTime(2013, 9, 1);
var date2 = DateTime.Now;
var account = "40700000000000000000";
var operations = api.GetMovementOnAccount(account, date1, date2);
4
©LuxoftTraining2014
Тяжелое наследие
 Задача: создать пункт меню «на лету». В
таблице.
private void tralala() {
var contextMenu = new ContextMenu();
contextMenu.Items.Add("MyNewItem");
gridColumn.ContextMenu = contextMenu;
}
 Ответ:
 Нарушения закона Деметры
e.MenuInfo.View.RowCellMenuCustomizations
5
©LuxoftTraining2014
Тяжелое наследие
 Задача: получение коллекции багов из
трекера
 Ответ:
 Ранняя проверка ошибок не производится
6
©LuxoftTraining2014
Тяжелое наследие
 Неочевидность использования
7
©LuxoftTraining2014
Многие решения здесь
8
©LuxoftTraining2014
Хорошее API
 Легко запомнить
 Легко использовать даже без документации
 Трудно использовать не по назначению
 Легко читать и поддерживать код
 Легко расширить
 Достаточно мощное для основных нужд
 Соответствует основным потребителям
9
©LuxoftTraining2014
Имена
Дан ScrollBox, какая функциональность у
методов?
 void ShiftDown(float distance)
 void ShiftDownRelative(float distance)
Ответ:
 ShiftDown – сдвиг на N пикселей
относительно текущей точки
 ShiftDownRelative – сдвиг на N процентов с
начала документа
10
©LuxoftTraining2014
Имена
Переименовать:
 void ShiftDown(float distance)
 void ShiftDownFromStart(float distance,
Measure measure)
Использование:
scrollBox.ShiftDown(400);
scrollBox.ShiftDownFromStart(400);
scrollBox.ShiftDownFromStart(25, Measure.Percent);
11
©LuxoftTraining2014
Излишняя сложность
 Система состояний UI компонента. «В лоб»
 Система состояний UI компонента. «В лоб»
var visualState = new VisualState("StateName");
var transition = new VisualTransition();
var keySetter = new KeySetter("Background", Colors.Red);
transition.PropertySetters.Add(keySetter);
visualState.Transitions.Add(transition);
new VisualStateBuilder("StateName")
.WithTransition()
.WithProperty("Background", Colors.Red)
.Build();
12
©LuxoftTraining2014
Излишняя сложность
 Анимация сдвига вниз
 Анимация сдвига вниз (с заботой о пользователе)
var storyboard = new Storyboard();
var propertyChange
= new PropertyChange(1d, EasingMode.Linear, 500);
var propertyChangeSequence
= new PropertyChangeSequence("Top", new []{propertyChange});
var uiAnimation = new UIAnimation(propertyChangeSequence);
storyboard.Add(uiAnimation, new []{border});
border.GlideDown(500);
13
©LuxoftTraining2014
Облегчение работы
 Можно все настроить вручную…
map.controls
.add('trafficControl') // пробки
.add('searchControl') // поиск
.add('zoomControl') // зум-контрол
.add('typeSelector') // слои
.add('geolocationControl') // геолокация
.add('fullscreenControl') // фуллскрин
…
 Но можно положиться на разработчиков
map.controls.add('default');
14
©LuxoftTraining2014
Излишняя сложность
 Помогайте пользователю в изучении системы
с помощью DSL, FluentInterface
 Упрощайте вызов частых методов
15
©LuxoftTraining2014
Кроссплатформенная согласованность
Яндекс.Диск названия методов:
 C#
 RemoveAsync
 TrashAsync
 ObjectiveC
 removeItemAtPath
 trashItemAtPath
 Java
 delete
16
©LuxoftTraining2014
Правило трех для плагинов
 Напишите несколько плагинов до релиза
 Если вы написали один, возможно другой не
заработает
 Если вы написали два, поддержка будет лучше, но
с трудностями
 Если вы написали три, все должно работать как
надо
17
©LuxoftTraining2014
Основные практики
 Коридорное тестирование
 Выявляет самые топорные методы и ситуации
 Автоматические тесты
 Первые практические примеры работы кода
 Написание документации в коде, внешней
 Позволяет выявить вещи посложнее, так как
описывать бред тяжело
 Написание программ с вашим API другой
группой
 Eating your own dog food
18
©LuxoftTraining2014
К.О.
 Составление API тяжелая задача
 Это не единичная активность в проекте
 Совершенство недостижимо, но пытаться стоит!
19
©LuxoftTraining2014
Вопросы
Контакты
 Письма писать на my@violet-tape.net
 Поболтать можно в skype violet-tape
20
©LuxoftTraining2014
Контакты
 Письма писать на my@violet-tape.net
 Поболтать можно в skype violet-tape

Contenu connexe

Similaire à Least Astonishment Principle

KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
2ГИС Технологии
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Softengi
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Ontico
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
Yandex
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
DevDay
 

Similaire à Least Astonishment Principle (20)

KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
 
Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayout
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Зачем нужен JavaScript в iOS-приложениях. Евгений Дымов
 Зачем нужен JavaScript в iOS-приложениях. Евгений Дымов Зачем нужен JavaScript в iOS-приложениях. Евгений Дымов
Зачем нужен JavaScript в iOS-приложениях. Евгений Дымов
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Журат М. - AFramework
Журат М. - AFrameworkЖурат М. - AFramework
Журат М. - AFramework
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
 
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA ConsultingРазработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 

Least Astonishment Principle

Notes de l'éditeur

  1. Запускаем и ничего? Удивительно? Удивительно. После этого начинаем гуглить, смотреть демки и обнаруживаем , что надо обернуть таблицу в BarManager. Это выглядит примерно как: перед тем как завести машину, подстригитесь. Я примерно могу нафантазировать себе зачем нужен бар мэнеджер в данном случае, но хотелось бы услышать это от вас. Ок, далее. Смотрю, что я могу получить через переменную е. Первое на что упирается взгляд, это Items.  Особенно когда оно идет вместе с MenuType и MenuInfo. Но это свойство ReadOnlyCollection, что вызывает некоторое недоумение, так как по идее редактировать содержимое меню при разработке я хочу и логических ограничений на это нет. Далее начинаешь перебирать все, где есть слово Menu, ведь работать надо с ним. И что я вижу: еще порция элементов связанных с меню. Хорошо, начинаем искать подходящее. К данным элементам справки уже нет.
  2. http://msdn.microsoft.com/ru-ru/library/bb286958.aspx 19 сервисов: часть как интерфейсы, часть как классы
  3. http://api.yandex.ru/disk/sdk/#windows
  4. Вспомнить как мы информер переписывали сначала просто сделали, чтобы работал простейший экран и система запоминала расположение экрана Но второму потребовались дочерние окна, не учли этого как-то Третьему надо было сохранять настройки и они могли влиять на другие части по задаче. Пришлось еще раз модифицировать апи для плагинов. Далее все пошло гораздо легче, только косметические правки может были.