Простота Дизайна - не раскрученная xp практика
DESCRIPTION
Вячеслав Москаленко, Luxoft (Киев) Наверняка, все мы слышали про TDD (Разработка через тесты), Continuous Integration (Непрерывная интеграция), Pair Programming (Парное программирование). Может быть, кто-то из нас более глубоко изучал эти дисциплины и пытался внедрить в текущую разработку. Все эти дисциплины составляют часть XP (экстремальное програмирование) методологии. К слову, эта методология подарила миру User Stories (Пользовательские Истории), как способ документации требований. Эти понятия на слуху, они маркетинговые, раскрученные. Есть менее используемые практики, но тем не менее важные с точки зрения усиления гибкости разработки. Эта короткая речь о простоте дизайна (Simple Design). О том, как в гибкой разработке, с очень короткими итерациями, развивать архитектуру и дизайн с точки зрения XP методологии. Какие основные преимущества и недостатки присущи экстремальной дисциплине, которая называется "Простота Дизайна".TRANSCRIPT
![Page 1: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/1.jpg)
Простота Дизайна Не раскрученная XP практикаВячеслав Москаленко
Agile Coach, «Luxoft»
![Page 2: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/2.jpg)
Наш мозг на грани выживания
Все кажется запутанным и сложным
![Page 3: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/3.jpg)
Сложные задачи
Сложная информация
![Page 4: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/4.jpg)
Сложные связи
Сложный дизайн
![Page 5: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/5.jpg)
Простота встречается редко
Но что это означает ?
![Page 6: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/6.jpg)
Умение достигать максимального эффекта
минимальными затратами
![Page 7: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/7.jpg)
Приведение сложных вещей
К простым формам
![Page 8: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/8.jpg)
Как уменьшить сложность дизайна ?
Путь экстремального программирования
![Page 9: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/9.jpg)
все тесты корректно срабатывают;
дизайн не содержит дублирующегося кода;
дизайн четко выражает намерения программиста;
дизайн содержит наименьшее возможное количество классов и методов.
![Page 10: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/10.jpg)
1. Фокусироваться на тестах
Тесты простые, не отключены и падают редко. Шаблоны xUnit
@Test() void given_push_pressure_100_and_car_with_ABS_verify_braking_distance_30() { ICar car = prepareCarWithABS(); car.pushBrake(100); assertThat(car.getBrakingDistance(), is(30));}
@Test() void given_push_pressure_50_and_car_without_ABS_verify_braking_distance_25() { ICar car = prepareCarWithoutABS(); car.pushBrake(100); assertThat(car.getBrakingDistance(), is(25));}
![Page 11: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/11.jpg)
2. Уменьшать количества кода
public void pushBrake(int pressure) {…if (carWithABS()) {
…} else {
…}…if (carWithABS()) {…} else {
…}…
}
Шаблоны проектирования
![Page 12: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/12.jpg)
3. Выражать намерение через код
Clean Code, SOLID
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1;}
public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells;}
![Page 13: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/13.jpg)
4. Не плодить сущности
Фабрика, которая возвращает один тип объектов
Библиотеки, которые никогда не используются
Дополнительные абстракции, которые «потом» понадобятся
![Page 14: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/14.jpg)
4. Упрощать внешние интерфейсы
Вот и все
![Page 15: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/15.jpg)
Полезные дисциплины
Design Patterns
Emergent Design
xUnit Patterns
Refactoring Patterns
Object Oriented Design
Doman Driven Design
Изучаем сквозь призму «Простого Дизайна»
![Page 16: Простота Дизайна - не раскрученная XP практика](https://reader033.vdocuments.net/reader033/viewer/2022061214/549be3c4ac7959e72a8b45ab/html5/thumbnails/16.jpg)
Послесловие
Или за что я люблю Maven
mvn clean install