2. Что такое «плохой» дизайн кода
в чем он выражается
какие несет проблемы
Принципы проектирования SOLID
Назначение
Примеры использования
Как обнаруживать и устранять плохой дизайн
кода
Запахи кода
Системы статического анализа кода
3.
4. Повторение
Отсутствие возможности повторного
использования кода
Монолитность
Плохая читаемость кода
Неоправданная сложность
Вязкость
Хрупкость
5.
6. Внесение изменений в систему, которая
проектировалась без учета возможности
появления таковых
Изменения в системе могут потребоваться
на любой стадии проекта:
Аналитика
Разработка
Сопровождение
7. Отсутствие формализированных
требований со стороны клиента
Уточнение требований на этапе
разработки, после утверждения ТЗ
Реализация дополнительного
функционала на этапе технического
сопровождения системы
8. Мы должны помнить об этом
Строить процесс разработки итеративно, с
поправкой на то, чтобы внесение
последующих изменений стоило нам как
можно меньше ресурсов
52. Пусть q(x) является свойством, верным
относительно объектов x некоторого типа T.
Тогда q(y) также должно быть верным для
объектов y типа S, где S является подтипом
типа T.
54. Задача
Мы хотим реализовать свой список с интерфейсом IList<T>. Его особенностью будет
то, что все записи в нем дублируются.
Данная реализация не представляет никакой опасности, если рассматривать ее
изолированно.
55. Взглянем на использование этого
класса с точки зрения клиента.
Клиент, абстрагируясь от
реализаций, пытается работать со
всеми объектами типа IList
одинаково:
56. Поведение списка DoubleList отличается от типичных
реализаций IList. Получается, что наш DoubleList не может быть
заменен базовым типом. Это и есть нарушение принципа
замещения Лисков.
Проблема заключается в том, что теперь клиенту необходимо
знать о конкретном типе объекта, реализующем
интерфейс IList. В качестве такого объекта могут передать
и DoubleList, а для него придется выполнять дополнительную
логику и проверки.
57. Решение
Правильным решением будет использовать свой собственный
интерфейс, например, IDoubleList.
Этот интерфейс будет объявлять для пользователей
поведение, при котором добавляемые элементы удваиваются.
59. Предусловия не могут быть
ужесточены в наследнике
Постусловия не могут быть ослаблены
в наследнике
Инварианты базового типа должны
соблюдаться и в наследнике
60. Рассмотрим пред и постусловия для интерфейса IList.
Для функции Add:
•предусловие: item != null
•постусловие: count = oldCount + 1
Для нашего DoubleList и его функции Add:
•предусловие: item != null
•постусловие: count = oldCount + 2
68. Зависимости внутри системы строятся на
основе абстракций.
Модули верхнего уровня не зависят от
модулей нижнего уровня.
Абстракции не должны зависеть от
деталей. Детали должны зависеть от
абстракций.
77. Отсутствие инверсии зависимостей не
всегда плохо.
Пример, зависимость от класса String.
78. Зависимости внутри системы строятся на
основе абстракций.
Модули верхнего уровня не зависят от
модулей нижнего уровня.
Абстракции не должны зависеть от
деталей. Детали должны зависеть от
абстракций.
87. Что такое плохой дизайн и откуда он берется
Как использовать принципы SOLID для
улучшения дизайна
Как поддерживать код в хорошем состоянии
88. Материалы xpinjection.com - http://xpinjection.com/resources/
Блог Александра Бындю - http://blog.byndyu.ru/
Книга «Принципы, паттерны и методики гибкой разработки на языке C#» -
http://www.ozon.ru/context/detail/id/5800704/
Книга «Инфраструктура программных проектов. Соглашения, идиомы и
шаблоны для многократно используемых библиотек .NET» -
http://www.ozon.ru/context/detail/id/5588868/
89. Трѐшников Павел
Ведущий разработчик СМС-ИТ
▪ www.sms-automation.ru
e-mail: treshnikov@gmail.com
twitter: @treshnikov
Editor's Notes
Аналогия – нормализированные модели DB.Нарушение приводит к Хрупкому дизайнуКритика: несовместимость с реальным миром, крайности реализации
Аналогия – нормализированные модели DB.Нарушение приводит к Хрупкому дизайнуКритика: несовместимость с реальным миром, крайности реализации
Аналогия – нормализированные модели DB.Нарушение приводит к Хрупкому дизайнуКритика: несовместимость с реальным миром, крайности реализации
Аналогия – нормализированные модели DB.Нарушение приводит к Хрупкому дизайнуКритика: несовместимость с реальным миром, крайности реализации
Аналогия – нормализированные модели DB.Нарушение приводит к Хрупкому дизайнуКритика: несовместимость с реальным миром, крайности реализации
Вам пофик, сколько лошадей, какой объем двигателя и тип подвески.Если после нажания на тормоз не тормозит -- ВНЕЗАПНО
Вам пофик, сколько лошадей, какой объем двигателя и тип подвески.Если после нажания на тормоз не тормозит -- ВНЕЗАПНО
Вам пофик, сколько лошадей, какой объем двигателя и тип подвески.Если после нажания на тормоз не тормозит -- ВНЕЗАПНО
History: mutable point
History: mutable point
History: mutable point
Что общего? Это аббревиатурыЧто разного? Solid это аббревиатура аббревиатур, а не – просто фразы