Как писать красивый код или основы solid

23
Как писать красивый код или основы S.O.L.I.D. Пинин Денис [email protected]

Upload: pavel-tsukanov

Post on 05-Dec-2014

4.852 views

Category:

Technology


13 download

DESCRIPTION

В данном докладе мы рассмотрим пять основных принципов дизайна классов в объектно-ориентированном проектировании, которые известны, как принципы SOLID. А также как обеспечить достаточный уровень гибкости, связанности, управляемости, стабильности и понятности кода.

TRANSCRIPT

Page 1: Как писать красивый код или основы SOLID

Как писать красивый код или основы S.O.L.I.D.

Пинин Денис[email protected]

Page 2: Как писать красивый код или основы SOLID

Что такое S.O.L.I.D.?

S - Single Responsibility Principle (SRP) (принцип единой ответственности)

O - Open/Closed Principle (OCP) (принцип «открыто/закрыто»)

L - Liskov Substitution Principle (LSP) (принцип замещения Лискоy)

I - Interface Segregation Principle (ISP) (принцип разделения интерфейса)

D - Dependency Inversion Principle (DIP) (принцип инверсии зависимостей)

Page 3: Как писать красивый код или основы SOLID

Зачем соблюдать принципы S.O.L.I.D.?

• Помогают построить архитектуру приложения, которое со временем будет проще (дешевле) поддерживать и развивать.

• Помогаю писать повторно используемый код.

Принципы != Правила

Page 4: Как писать красивый код или основы SOLID

Принцип единой ответственности (SRP)

Формулировка: не должно быть больше одной причины для изменения класса

Потому что это ведет к хрупкости дизайна (пишем один «функционал» - отваливается

другой)

Почему?

Page 5: Как писать красивый код или основы SOLID

А может не надо?

Неееет….

Page 6: Как писать красивый код или основы SOLID

Как писать красивый код или основы S.O.L.I.D.

Пинин Денис[email protected]

Самый главный нарушительSRP – God Object:

Page 7: Как писать красивый код или основы SOLID

Нарушитель побежден!

Page 8: Как писать красивый код или основы SOLID

Принцип открытости/закрытости(OCP)

Формулировка: программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но

закрыты для изменения

Почему?

Потому что позволяет быстро и безболезненно реагировать на изменения бизнес-логики

Page 9: Как писать красивый код или основы SOLID

Чем плох этот код?Заказчик: Лог продаж в файлах!? Это же отстой! Изменение требований: лог надо хранить в БД.

Разработчик: Нет проблем!

Page 10: Как писать красивый код или основы SOLID

Нарушаем принцип OCP!

Page 11: Как писать красивый код или основы SOLID

А так лучше?

Page 12: Как писать красивый код или основы SOLID

Принцип замещения Лисков (OCP)

Формулировка №1: если для каждого объекта o1 типа S существует объект

o2 типа T, который для всех программ P определен в терминах T, то поведение P не

изменится, если o1 заменить на o2 при условии, что S является подтипом T.

(ничего не понятно)

Почему?

Потому что клиентский код начинает считать производный класс разновидностью базового, и возможно появление кода, явно использующего

этот факт

Формулировка №2: подтипы должны быть заменяемы базовыми типами.

Page 13: Как писать красивый код или основы SOLID

Ошибочное наследование

Попробуем протестировать

Page 14: Как писать красивый код или основы SOLID

Прямоугольник или квадрат?

Page 15: Как писать красивый код или основы SOLID

Принцип разделения интерфейса (ISP)

Формулировка: клиенты не должны зависеть от методов, которые они не используют

Почему? Потому что если мы определим большой

универсальный интерфейс, тогда в наследниках возможно появление множества заглушек, а

соответственно, много лишнего кода, который неудобно поддерживать

Page 16: Как писать красивый код или основы SOLID

Как бывает в жизни… (я точно видел)

Page 17: Как писать красивый код или основы SOLID

А так надо… (я стараюсь так делать :-) )

Page 18: Как писать красивый код или основы SOLID

Принцип инверсии зависимости (DIP)

Формулировка: • Модули верхнего уровня не должны зависеть от

модулей нижнего уровня. Оба должны зависеть от абстракции.

• Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Почему?

Потому что возникает паутина зависимостей, превращая реализацию очередного изменения требований в

настоящий кошмар.

Page 19: Как писать красивый код или основы SOLID

Класс который слишком много знал…

• Знает, как вычислить сумму заказа;• Знает, как и каким калькулятором вычислить сумму скидки;• Знает, что означают коды стран;• Знает, каким образом вычислить сумму налога для той или иной

страны;• Знает формулу, по которой из всех слагаемых вычисляется стоимость заказа.

Page 20: Как писать красивый код или основы SOLID

И что с ним стало…до…

после…

UI Layer

Business Layer

DataAccess Layer

UI LayerBusiness Layer

Interface

Business LayerDataAccess

Layer Interface

DataAccess Layer

Page 21: Как писать красивый код или основы SOLID

От чего мы хотим убежать?

Жесткость Хрупкость Неподвижность

Жесткость - изменение одной части кода затрагивает слишком много других частей;

Хрупкость - даже незначительное изменение в коде может привести к совершенно неожиданным проблемам;

Неподвижность - никакая из частей приложения не может быть легко выделена и повторно использована.

Page 22: Как писать красивый код или основы SOLID

Только S.O.L.I.D.?

REP

SAP

CCP

SDP

CRP

ADP

Page 23: Как писать красивый код или основы SOLID

ВОПРОСЫ?