Post on 16-Jun-2015
transcript
Разработка ПОпроектирование
Павел Егоров@xoposhiy
pe@kontur.ru
Архитектура
Высокоуровневый дизайн
Детальный дизайн
Язык программирования, фреймворк, технология, операционная система, …
Разбиение на компоненты, интерфейсы, протоколы взаимодействия
Устройство и взаимодействие отдельных классов
Проектирование?
подготовка кода к изменениям…к наиболее вероятным
?!?
Нужен пример!
Курс «Математический анализ» Список литературы1. Демидович Б.П. «Сборник задач по матану»2. Ильин, Позняк «Основы матана» Таблица успеваемости
Контрольная 1
Контрольная 2
Экзамен
Иванов 4 5 5
Петров — 3 3
Сидоров 5 — 4
Что тут думать? Делать надо!
Write("<html><body>");Write("<h1>Курс "+GetCourseName(courseId)+"</h1>");Write("<h2>Список литературы</h2>");Write("<ol>");foreach(var book in GetCourseBooks(courseId))
Write("<li>" + book + "</li>");Write("</ol>");Write("<h2>Таблица успеваемости</h2>");...
Проектирование —
подготовка кода к изменениям…к наиболее вероятным
Наиболее вероятные изменения?
Курс «Математический анализ» Список литературы1. Демидович Б.П. «Сборник задач по матану»2. Ильин, Позняк «Основы матана» Таблица успеваемости
Контрольная 1
Контрольная 2
Экзамен
Иванов 4 5 5
Петров — 3 3
Сидоров 5 — 4
Наиболее вероятные изменения?
• Другой стиль оформления• Другие странички из списков,
таблиц и заголовков• Другие форматы: *.txt, *. pdf, …• Новые элементы: картинки,
графики, …
Проблему осознали.
Как её решать?
Не знаешь что делать?Отделяй логику от представления!
Заголовок документаЗаголовок спискаСписокЗаголовок таблицыТаблица
<h1>…</h1><h1>…</h1><ol> … </ol><h1>…</h1><table>
<tr><td>…</table>
WriteBeginDocument();WriteHeader("Курс " + courseName);WriteHeader("Список литературы");WriteList(booksList);WriteHeader("Таблица успеваемости");WriteTable(exams, students, marks);WriteEndDocument();
Логика без представления
Html → Text
Html → Text
Как подменять реализацию WriteXXXX?
Объект— нечто, с чем можно взаимодействовать— возможно, имеющее состояние
Нечто, умеющее создавать примитивы в HTML: заголовки, списки, таблицы, …
ООП
ООПСоздать объект
writer = new HtmlDocumentWriter();
Совершить действия с объектомwriter.WriteHeader("Курс " +
courseName);
Типы объектов объединяются в иерархии
HtmlDocumentWriter is a WriterPdfDocumentWriter is a Writer
ООПvoid WriteCourseDocument(DocumentWriter writer){
...writer.WriteHeader("Курс " + courseName);writer.WriteHeader("Список литературы");writer.WriteList(booksList);writer.WriteHeader("Таблица успеваемости");writer.WriteTable(exams, students, marks);
}WriteCourseDocument(new HtmlDocumentWriter());
И что получилось?
Появляются новые виды отчетов
void WriteCourseDocument(DocumentWriter writer){
...writer.WriteHeader("Курс " + courseName);writer.WriteHeader("Список литературы");writer.WriteList(booksList);writer.WriteHeader("Таблица успеваемости");writer.WriteTable(exams, students, marks);
}WriteCourseDocument(new HtmlDocumentWriter());
Появляются новые виды отчетов
void WriteFinanceDocument(DocumentWriter writer){
...writer.WriteHeader("Наши финансы");writer.WriteHeader("Потрачено");writer.WriteList(expenses);writer.WriteHeader("Заработано");writer.WriteList(income);
}
Другие форматы: *.txt, *. pdf, …
WriteCourseDocument(new HtmlDocumentWriter());WriteCourseDocument(new TextDocumentWriter());WriteCourseDocument(new PdfDocumentWriter());...
Новый формат — новый Writer.
Новые элементы: картинки, графики, …
Новые методы DocumentWriter
writer.WritePlot(…) writer.WriteImage(…)...
Диаграма классовAbstractDocumentWriter
WriteTitleWriteListWriteTableWriteImage
HtmlWriter
WriteTitleWriteListWriteTableWriteImage
PdfWriterWriteTitleWriteListWriteTableWriteImage
CourseReport
FinanceReport
Мораль
1. Архитектура бывает объективно плохой.
2. Хорошая архитектура не требует сильно больше усилий [при некотором опыте]
Круто! Хочу быть проектировщиком!1. Сначала стань хорошим
программистом!2. Нет! П.1 точно нельзя
пропустить!3. Читай, пробуй, думай
Читать?
Принципы SOLID (см. google.com)
Вопросы?
@xoposhiype@kontur.ru
http://vk.com/kontur_edu
Разработка ПОтребования
Павел Егоров@xoposhiy
pe@kontur.ru
Стоимость разработки
Подготовка50%
Кодирование
20%
Тестирование
30%
Как собиратьи фиксировать требования?
Joel Spolsky Функциональные спецификации малой кровью Подкаст u http://habrahabr.ru/post/64608/
eng: http://www.scrumalliance.org/articlesrus: http://blog.scrumtrek.ru/
Доклады: http://www.req-labs.ru/
…500+ страниц каждая…
Как собиратьи фиксировать требования?
Самое простоеuser-story
User Storyтипичная история из жизни пользователя
После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости
Позиционировать в ленте на последнем прочитанном
сообщении
После трудной недели, Петя проспал целых 20 часов. Разлепив глаза, он открыл Твиттер и начал читать накопившиеся за это время новости
Позиционировать в ленте на последнем прочитанном
сообщении
Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь
Загружать беседу сразу при
открытии твита
Прочитав непонятный ответ, Петя решил перечитать всю беседу, чтобы вспомнить, о чем речь
Загружать беседу сразу при
открытии твита
Увидев интересную ссылку, Петя решил открыть ее в браузере.Но из-за медленного интернета, оставив браузер открывать ссылку, вернулся обратно читать твиттер
Сделать кнопку «Открыть в фоне» / «Прочитать
позже»
Удачные User story помогают
формулировать требования
На что ещё годятся User Stories?
User Stories с приоритетами — это и есть план!
Прогон user story при тестировании помогает
вскрывать проблемы
При должном старании можно
сформулировать сотни User Stories!
«Эпик» — цель пользователя
• Петя продвигает сайт через twitterДля этого он фоловит, отвечает, ищет, пишет, ставит кнопки на сайт…
• Катя следит за жизнью супер-звездДля этого она читает, смотрит фотки, ходит по ссылкам
User Story — важные жизненные истории,
вскрывающие требованияпомогающие планировать
и тестировать
Обрастают детальными требованиями
и группируются в Эпики
Пользовательские интерфейсы
часто применяется при проектировании
пользовательских интерфейсов
Прототипирование— быстрая проверка идеи
Прототип на бумаге
Прототип на доске
Черновики в блокнотике
Прототипирование интерфейса вместе с потенциальным пользователем
Проверено, отлично работает!
Впрочем, не только с интерфейсами
Тестирование прототипа:Найти потенциального
пользователяПодготовить “задачи”
Замечать все затруднения у пользователя!
Пример: http://www.youtube.com/watch?v=9wQkLthhHKA
Курс «Проектирование пользовательских интерфейсов»
(СКБ Контур и Яндекс)
http://cripi.ru + следите за объявлениями!
С чего начать«Дизайн пользовательского интерфейса» Влад Головач«Не заставляйте меня думать» Стив Круг«Психбольница в руках пациентов» Алан Купер
В сетиФреш: новости мира юзабилити — http://fresh.gui.ru/Советы Бюро Горбунова — http://artgorbunov.ru/bb/soviet/Дизайн-собака — http://design.artgorbunov.ru/Ководство — http://www.artlebedev.ru/kovodstvo/sections/
Вопросы?
@xoposhiype@kontur.ru
http://vk.com/kontur_edu