Solid - принципы с примерами PHP презентация

Содержание

Слайд 2

Что такое SOLID принцины?

Single responsibility
Open-closed
Liskov substitution
Interface segregation
Dependency inversion

Слайд 3

Single Responsibility Принцип единой ответственности

"На каждый объект должна быть возложена одна единственная обязанность"
Конкретный класс

должен решать конкретную задачу — ни больше, ни меньше.

Слайд 4

Single Responsibility Плохой код

Слайд 5

Single Responsibility Почему плохой код?

Такой код сложнее в сопровождении.
Каждая ответственность — причина для изменений,

а изменения потенциально опасны.
Каскадные изменения тесносвязанных ответственностей.

Слайд 6

Single Responsibility Хороший код

Слайд 7

Single Responsibility Реальный пример

PHPMailer — класс содержит 3925 строк кода и порядка 80 публичных

методов
CodeIgniter

Слайд 8

Open-Closed Принцип открытости/закрытости

"Программные сущности должны быть открыты для расширения, но закрыты для модификации"
Все классы,

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

Слайд 9

Open-Closed Плохой код

Слайд 10

Open-Closed Почему плохой код?

Плохо расширяемый код
Его сложно повторно использовать.
Необходимо менять OrderCalculator для новых Order

Слайд 11

Open-Closed Хороший код

Слайд 12

Open-Closed Хороший код

Слайд 13

Symfony Framework

Open-Closed Реальный пример

Слайд 14

Open-Closed Реальный пример - Улучшенный

Слайд 15

Liskov Substitution Принцип подстановки Лисков

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

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

Слайд 16

Liskov Substitution Плохой код (пока ещё хороший)

Слайд 17

Liskov Substitution Плохой код

Слайд 18

Liskov Substitution Почему плохой код?

При использовании FreeOrder “ломается” OrderCollector.
FreeOrder не является настоящим подклассом SimpleOrder.
Подкласс

должен определяться на основе поведения.

Слайд 19

Liskov Substitution Хороший код

Слайд 20

Liskov Substitution Плохой код

Слайд 21

Liskov Substitution Хороший код

Слайд 22

Liskov Substitution Реальный пример

Symfony 2 Framework

Слайд 23

Interface Segregation Принцип разделения интерфейса

«Много специализированных интерфейсов лучше, чем один универсальный»
Соблюдение этого принципа необходимо

для того, чтобы классы-клиенты использующий/реализующий интерфейс знали только о тех методах, которые они используют, что ведёт к уменьшению количества неиспользуемого кода.

Слайд 24

Interface Segregation Плохой код

Слайд 25

Interface Segregation Почему плохой код?

Интерфейс слишком большой, что затрудняет создание классов, реализующих его.
Большие интерфейсы

не так удобно повторно использовать.
Интерфейс содержит слишком много ответственностей (вероятно нарушение SRP)
Наверняка, наследуемые классы будут создавать методы-”пустышки” для данного интерфейса (вероятно нарушение LSP)

Слайд 26

Interface Segregation Хороший код

Слайд 27

Interface Segregation Реальный пример

Laravel 5 Framework

Слайд 28

Dependency Inversion Принцип инверсии зависимостей

«Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня

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

Слайд 29

Dependency Inversion Плохой код

Слайд 30

Dependency Inversion Почему плохой код?

Зависимости от деталей приводит к снижению гибкости.
Такой код тяжелее тестировать.

Слайд 31

Dependency Inversion Хороший код

Слайд 32

Dependency Inversion Реальный пример

Laravel 5 Framework

Слайд 33

Заключение

SOLID — не панацея
”Любую проблему можно решить с помощью дополнительных абстракций, кроме проблемы

избыточных абстракций”
Главное — управление сложностью кода
Имя файла: Solid---принципы-с-примерами-PHP.pptx
Количество просмотров: 53
Количество скачиваний: 0