Осознанность рефакторинга: Модель принятия...

42
Осознанность рефакторинга Евгений Кривошеев,
  • Upload

    -
  • Category

    Documents

  • view

    2.126
  • download

    5

description

Представьте на секунду, что сейчас Вы работаете над сложной высоконагруженной системой, которая делает людей счастливыми. И этот проект настолько важен для человечества, что команда QA и техлиды с архитекторами требует детального обоснования каждого Вашего решения. Как нетрудно догадаться, речь идет о Вашем текущем проекте, к которому вернетесь после конференции. Как Вы обеспечите качество? Как сделаете дизайн поддерживаемым и приятным, а решения примете осознанно и обоснованно? В докладе мне хотелось бы предложить Вам технику проектирования, которая позволит Вам делать выборы осознанно и вывести мастерство проектирования архитектуры и дизайна на новый уровень. Предлагаемый подход довольно распространен, его применяют опытные специалисты в различных областях – от сложных корпоративных систем до высоконагруженных публичных веб-проектов. Я попытался обобщить это знание и сформулировать базовые принципы этого подхода к созданию осознанного дизайна.

Transcript of Осознанность рефакторинга: Модель принятия...

Page 1: Осознанность рефакторинга: Модель принятия инженерных решений

Осознанность рефакторинга

Евгений Кривошеев,

Page 2: Осознанность рефакторинга: Модель принятия инженерных решений

Цели доклада •  Участники смогут принимать осознанные инженерные решения

•  Участники смогут обеспечить высокое качество дизайна

•  Участники решат как минимум одну нерешенную практическую проблему

Page 3: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 4: Осознанность рефакторинга: Модель принятия инженерных решений

Понятие качества Scope, Defects

Time Resources Quality

Page 5: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 6: Осознанность рефакторинга: Модель принятия инженерных решений

Обоснование через качество Не уверен, что делаю в коде так, потому что надо…

…или потому что так написано в книжке

Page 7: Осознанность рефакторинга: Модель принятия инженерных решений

Кейсы рефакторингов // extract method

Page 8: Осознанность рефакторинга: Модель принятия инженерных решений

Кейсы рефакторингов // move method

Page 9: Осознанность рефакторинга: Модель принятия инженерных решений

Кейсы рефакторингов // extract class

Page 10: Осознанность рефакторинга: Модель принятия инженерных решений

Кейсы рефакторингов // creator pattern → factory pattern

Page 11: Осознанность рефакторинга: Модель принятия инженерных решений

Кейсы участников •  Напишите на листочке последнюю сложную или нерешенную проблему

•  Последний holy war •  Проблема любая, но желательно в контексте дизайна / рефакторинга

•  В конце Вы попробуем решить её

Page 12: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 13: Осознанность рефакторинга: Модель принятия инженерных решений

Задача рефакторинга

Привести дизайн к желаемым характеристикам

Какие характеристики желаемые?*

*→быть фабрике или создателю?

Page 14: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 15: Осознанность рефакторинга: Модель принятия инженерных решений

Место QA в требованиях

Page 16: Осознанность рефакторинга: Модель принятия инженерных решений

Важность простоты

Page 17: Осознанность рефакторинга: Модель принятия инженерных решений

Простота vs Понятность*

Page 18: Осознанность рефакторинга: Модель принятия инженерных решений

Влияние D.M. на QA

Дизайн должен реализовать требования

Page 19: Осознанность рефакторинга: Модель принятия инженерных решений

Рефакторинги и QA

Рефакторинг Гибкость Простота Понимаемость Тестабельность extract method extract class move method introduce factory

↑ или ↓ или ?

Меняя дизайн, меняем и QA

Page 20: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 21: Осознанность рефакторинга: Модель принятия инженерных решений

Корреляции требований

Page 22: Осознанность рефакторинга: Модель принятия инженерных решений

Корреляции требований

Page 23: Осознанность рефакторинга: Модель принятия инженерных решений

Корреляции требований

Требования зачастую конфликтуют.

Дизайн – это компромисс.*

*За все приходится платить

Page 24: Осознанность рефакторинга: Модель принятия инженерных решений

Конфликты требований интеллект

готовка

уборка TCO

специальные навыки

Ирка Петрова Саша Грей

Page 25: Осознанность рефакторинга: Модель принятия инженерных решений

Design is a tradeoff Factory Pattern

Cache Pattern

Page 26: Осознанность рефакторинга: Модель принятия инженерных решений

Design is a tradeoff

Нет «хорошего» и «плохого» дизайна.

Есть подходящий и неподходящий.

Page 27: Осознанность рефакторинга: Модель принятия инженерных решений

Так быть или не быть? Factory Pattern

Page 28: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 29: Осознанность рефакторинга: Модель принятия инженерных решений

Минутка матана

<матан>

<a>Вторая теорема Гёделя о неполноте</a>

</матан>

Page 30: Осознанность рефакторинга: Модель принятия инженерных решений

Метамодель дизайна

Page 31: Осознанность рефакторинга: Модель принятия инженерных решений

Дизайн через требования

Инкапсулируем ответственность в класс

Инлайнируем ответственность

Гибкость Простота

Функционал вариабелен (ось вариативности)

Функционал стабилен

Page 32: Осознанность рефакторинга: Модель принятия инженерных решений

Полнота требований

Функционал вариабелен (ось вариативности)

Функционал стабилен ?  

Page 33: Осознанность рефакторинга: Модель принятия инженерных решений

Метамодель требований

BDUF YAGNI

Page 34: Осознанность рефакторинга: Модель принятия инженерных решений

Метамодель требований

BDUF YAGNI ?  

Page 35: Осознанность рефакторинга: Модель принятия инженерных решений

Метамодель процесса

Page 36: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 37: Осознанность рефакторинга: Модель принятия инженерных решений

Обоснованный дизайн

Инкапсулируем ответственность в класс

Инлайнируем ответственность

Гибкость Простота

Функционал вариабелен (ось вариативности)

Функционал стабилен ?

BDUF YAGNI ??

Page 38: Осознанность рефакторинга: Модель принятия инженерных решений

Обоснованный дизайн

Наличие java interface в коде в итоге обосновывается бизнес-моделью компании

Page 39: Осознанность рефакторинга: Модель принятия инженерных решений

Сценарий

Page 40: Осознанность рефакторинга: Модель принятия инженерных решений

Отлить в граните •  Рефакторинг – направленное обоснованное изменение дизайна.

•  Дизайн – это компромисс. За все нужно платить.

•  Необходимо выявить конфликт ожиданий.

•  Для принятия решения следует подняться выше на уровень абстракции.

•  Решения локальны и специфичны.

Page 41: Осознанность рефакторинга: Модель принятия инженерных решений

Персональный кейс

Получилось ли решить Ваш кейс?*

*Если нет, продолжим за

Page 42: Осознанность рефакторинга: Модель принятия инженерных решений

Контакты

Евгений Кривошеев, [email protected] Никита Филиппов, [email protected] Асхат Уразбаев, [email protected]

«Тяжело в учении – легко в бою»

SkillTrek – это дистанционный центр компетенций, где специалисты получают востребованные на рынке знания и навыки в условиях реальных проектов с выбором удобной им загрузки