35
Разработка веб-сервисов Беседа 7: Программирование или борьба со сложностью

Разработка веб-сервисов осень 2013 лекция 7

Embed Size (px)

Citation preview

Разработкавеб-сервисов

Беседа 7: Программирование или борьба со сложностью

План занятия

Выбор инструментария

Борьба со сложностью

Как делать нужно (паттерны)

Как делать не нужно (антипаттерны)

2

Выбор языка программирования

Выбор языка. Плюсы

Если язык хорошо знаком

Выше производительность (до 30%)

Если используется высокоуровневый язык

Снова выше производительность

3

Выбор языка программирования

Выбор языка. Плюсы

Если используется распространенный язык

Больше выбор, ниже затраты

Если используется специализированный язык

Более удобные инструменты, выше производительность

4

Выбор языка программирования

Выбор языка

Знакомые языки

Высокоуровневые языки

Распространенные языки

Специализированные языки там, где нужно

5

Выбор языка программирования

Выбор языка. Минусы

На фортране можно писать на любом языке

Нужно знать нюансы – возможности и ограничения

6

Выбор языка программирования

Выбор языка. Примеры ограничений

Проверка целочисленности деления

Проверка на переполнение целого числа

Равенство двух чисел с плавающей точкой

Ошибки округления

7

Выбор языка программирования

Выбор языка. Примеры борьбы с ограничениями

Равенство двух чисел с плавающей точкой:

Используйте допустимую точность

Ошибки округления

Используйте свои методы или просто целые числа

8

Сложность

Программирование — это борьба со сложностью.

Хороший программист — не только тот, кто много знает и умеет, но и тот, чей код прост для понимания и корректно решает проблему

9

Сложность

Желательные характеристики системы

Минимальная сложность

Простота сопровождения

Слабая связность компонентов

Повторное использование кода

Минимализм и полнота

Стандартизация подходов

10

Сложность

Борьба со сложностью

Архитектура

Кодирование

Сопровождение

11

Сложность

Борьба со сложностью. Архитектура

Разделение системы на подсистемы

Избегайте глубокой иерархии классов

Делайте классы и методы короткими

12

Сложность

Борьба со сложностью. Кодирование

По максимуму избегайте глобальных данных

Избегайте большого числа вложенных циклов

Определите стратегию отлова ошибок

Не используйте несколько парадигм одновременно

13

Сложность

Борьба со сложностью. Сопровождение

Придерживайтесь стандарта наименований

Форматируйте код

Комментируйте код

Избегайте «религиозных войн»

14

Борьба со сложностью

Зачем нужны стандарты?

Ускоряют изучение кода

Компенсируют недостатки языка

Уменьшают дублирование названий

15

Борьба со сложностью

Когда нужны стандарты?

Несколько программистов

Большое количество кода

Длительное использование кода

16

Борьба со сложностью

Примеры стандартов

Описание назначения метода или переменной

usrId = Reports.GetOwnerId( obj );

17

Борьба со сложностью

Примеры стандартов

Не используйте названий, которые не отражают суть

$tt = mainObj.make($data);

18

Борьба со сложностью

Примеры стандартов

Различия между названием переменной и метода

usrId = Reports.GetOwnerId( obj );

19

Борьба со сложностью

Примеры стандартов

Свои наименования для переменных, констант и типов

set var_data = in_usrid;

set t_user.min_age = const_min_age;

20

Борьба со сложностью

Примеры стандартов

Форматируйте имена для упрощения чтения

NOONEKNOWSWHATITMEANS

vs

noone_knows_what_it_means

21

Борьба со сложностью

Шаблоны проектирования

Шаблон (паттерн) — конструкция (набор методов или практик), описывающая решение типовой проблемы

22

Шаблоны проектирования

Плюсы шаблонов

Снижают сложность, предоставляя информацию о коде

конечно, если другие программисты с ними знакомы

Снижают число ошибок за счет стандартов

Ускоряют проектирование

23

Шаблоны проектирования

Минусы шаблонов

Иногда большие накладные ресурсы на адаптацию

Использование шаблонов ради шаблонов

24

Шаблоны проектирования

Примеры шаблонов

Основные

Адаптер — преобразование интерфейса в другой интерфейс

Декоратор — расширение функциональности класса без наследования

Одиночка (Singleton) — класс только с одним экземпляром

25

Шаблоны проектирования

Примеры шаблонов

Параллельное программирование

Обмен сообщениями — компоненты могут обмениваться информацией

Блокировка (Lock) — использование ресурса в эксклюзивном режиме

Read-write lock — раздельное чтение, эксклюзивная запись

26

Шаблоны проектирования

Примеры шаблонов

Другие примеры

MVC — Model + View + Controller

DAO — Data Access Object

27

Шаблоны проектирования

Антипаттерны

Антипаттерн — описание наиболее частых проблем в проектировании, разработке и управлении

28

Шаблоны проектирования

Примеры антипаттернов

Раздувание ПО — разрешение использования последующими версиями программы большего числа ресурсов

Бензиновая фабрика — излишнее переусложнениеархитектуры

Ненужная сложность — чрезмерная сложность в решении проблемы

29

Шаблоны проектирования

Примеры антипаттернов

Гонка (Race Condition) — непредвидение наступления событий в порядке, отличном от ожидаемого

Божественный объект — чрезмерная концентрация функций в одном объекте

Лодочный якорь — сохранение более не используемого кода

30

Шаблоны проектирования

Примеры антипаттернов

Таинственный код — неиспользование мнемоническипонятного кода

Жесткое кодирование (Hard Code) — жесткие рамки использования кода

Мягкое кодирование — настраивается всё, что угодно. Программирование на конфигах

Волшебные числа — включение в алгоритмы чисел без объяснения смысла

31

Шаблоны проектирования

Примеры антипаттернов

Программирование методом Copy-Paste

Изобретение колеса

Изобретение квадратного колеса

Коммит-убийца — внесение кода в репозиторий без тестирование влияния на другие части кода

Преждевременная оптимизация

32

Шаблоны проектирования

Примеры антипаттернов

Организационные

Единственный знающий человек

Рыцарь на белом коне — попытки починить без информирования что сделал и почему

Управление грибами — недостаточное информирование сотрудников о целях задачи и способе решения

33

Резюме

Выбирайте инструменты, а не язык

Боритесь со сложностью

Используйте стандартные решения проблем

Избегайте неправильных подходов

34

Вопросы?

Максим Бабич

[email protected]

+7 916 9415275