SlideShare a Scribd company logo
CTO at Serpstat
● CTO at Serpstat;
● 7+ лет опыта разработки;
● из них 3+ лет работаю с SOA, CQRS и
DDD;
● пишу на PHP, JS, Lua;
● придерживаюсь принципов SOLID,
DRY, KISS, YAGNI
● за последний год провёл 200+
собеседований
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
● невозможно отделить и применить класс в другой части
приложения
● объект умеет слишком многое
● бизнес логика концентрируется в одном классе
● изменение логики поведения объекта приводит к
изменениям в других местах приложения, где это не
подразумевалось изначально
● Антипаттерн God Object
● Active Record — паттерн или антипаттерн?
● PHPMailer — в классе 4000+ строк кода и 80+ публичных
методов
● CodeIgniter — много классов, нарушающих SRP
● Разработка посредством TDD
● Использовать паттерны:
○ Facade (Фасад)
○ Proxy (Прокси)
○ Extract Class (Выделение частного класса)
○ другие структурные паттерны
● на ранних этапах проектирования, если есть время на
реализацию подобных механизмов
● при изменении требований к логике работы приложения или
его части
● использование простых связей между двумя классами:
User -> Logic
● использование конкретных объектов без абстракций
● Расширять функциональность путём наследования
● Использовать паттерны:
○ Strategy (Стратегия)
○ Template Method (Шаблонный метод)
○ Identity Map (Карта соответствия)
Принцип подстановки очень близок к методологии контрактного
программирования.
● Предусловия не могут быть усилены в подклассе
● Постусловия не могут быть ослаблены в подклассе
● Правило истории — подкласс не должен создавать новых
мутаторов и аксессоров для свойств, определенных в
базовом классе
● Методы подкласса не могут генерировать никаких
дополнительных исключений, кроме тех, которые сами
являются подклассами исключений, генерируемых методами
базового класса
Реализация наследования класса Square (Квадрат) от класса
Rectangle (Прямоугольник)
● выполнять рекомендации с предыдущего слайда
● Template Method (Шаблонный метод)
● Сущности не должны зависеть от методов, которые они не
используют
● Сущности должны знать только о тех методах, которые
необходимы им в работе
● При изменении метода интерфейса не должны меняться
сущности, которые этот метод не используют
Laravel 5 — interface Authenticatable
1. Модули верхних уровней не должны зависеть от
модулей нижних уровней.
Оба типа модулей должны зависеть от абстракций.
2. Абстракции не должны зависеть от деталей.
Детали должны зависеть от абстракций.
Laravel 5 — class Dumper
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Общая идея написание слабо связанного кода
Принцип Inversion of Control (Инверсия управления)
Паттерн,
реализующий принцип
Dependency Injection Abstract Factory /
Factory Method
Service Locator
Соответствует SOLID? + + -
Netpeak Talks #3: Масштабируемое приложение на PHP
“IoC — это понятие, которое отличает библиотеку от фреймворка.” (с) Martin Fowler
В классическом самописном приложении
ваш код контролирует внешнее окружение,
время и порядок вызова методов библиотек.
В случае фреймворка обязанности
инвертируются: фреймворк предоставляет
доступные точки расширения, через которые он
вызывает методы вашего кода.
Простой метод обратного вызова или любая
реализация паттерна Наблюдатель является примером
инверсии.
Зная значение понятия IoC, становится ясно, что такое понятие как IoC-контейнер лишено
смысла.
— это библиотека, фреймворк, программа если хотите, которая позволит вам
упростить и автоматизировать написание кода с использованием данного подхода на
столько, на сколько это возможно
Внедрение зависимостей в .NET
Марк Симан
На русском языке опубликована на сайте smarly.net
Ссылка на книгу: http://bit.ly/2D458yb
Код, который я показывал в
примерах, добавлен на GitHub
https://github.com/NetpeakTalks
Netpeak Talks #3: Масштабируемое приложение на PHP

More Related Content

PPTX
ковалев нестандатное нт
PPTX
Составные части объектного подхода
PDF
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
PPTX
юнит тестирование Fork
PPTX
Roslyn Code Analysis
PDF
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
PPTX
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
ковалев нестандатное нт
Составные части объектного подхода
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
юнит тестирование Fork
Roslyn Code Analysis
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...

What's hot (19)

ODP
Тест-менеджмент и баг-треккинг в SpiraTest
PDF
Практическое применение принципа инверсии зависимостей на примере Ruby
PPTX
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
PDF
Грабли автоматизации. Учимся на чужих ошибках
PPTX
ПиАПС, Лекция №1б - Представление архитектуры
PPT
Тестирование весна 2014 смешанное занятие 2
PPTX
Документация тестировщика - Александр Трибушный
PPTX
ООП. Рекомендуемые информационные ресурсы
PPT
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
PPTX
МиСПИСиТ (разработка программного модуля)
PDF
Обнаружение уязвимостей логики приложений методом статического анализа. Где п...
PPTX
закон иерархических компенсаций седова и C++ core guidelines
PPT
Шаблоны разработки ПО. Часть 1. Введние
PPTX
шебалков инф
PDF
«Пуленепробиваемый фронтенд: разработка под React на TypeScript», Станислав П...
PPTX
About Testers
PPTX
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
PPTX
Наследование и полиморфизм
Тест-менеджмент и баг-треккинг в SpiraTest
Практическое применение принципа инверсии зависимостей на примере Ruby
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Грабли автоматизации. Учимся на чужих ошибках
ПиАПС, Лекция №1б - Представление архитектуры
Тестирование весна 2014 смешанное занятие 2
Документация тестировщика - Александр Трибушный
ООП. Рекомендуемые информационные ресурсы
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
МиСПИСиТ (разработка программного модуля)
Обнаружение уязвимостей логики приложений методом статического анализа. Где п...
закон иерархических компенсаций седова и C++ core guidelines
Шаблоны разработки ПО. Часть 1. Введние
шебалков инф
«Пуленепробиваемый фронтенд: разработка под React на TypeScript», Станислав П...
About Testers
Безопасность на максималках: как писать надёжный C/C++ код для встраиваемых с...
Наследование и полиморфизм
Ad

Similar to Netpeak Talks #3: Масштабируемое приложение на PHP (20)

PPTX
разработка бизнес приложений (7)
ODP
Refactoring
PDF
Архитектура в Agile: слабая связность
PDF
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
PPTX
Konstantin slisenko - Spring Framework
PPTX
Как пройти собеседование и получить первую работу на Swift
PDF
Как разраба
PPTX
Большие проекты, архитектура и фреймворки.
PDF
Выжить с помощью ООП. Максим Гопей
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PDF
Survive with OOP
PPT
Design Principles
PPTX
Как писать красивый код или основы SOLID
PPTX
Aspect-Oriented Programming in PHP
PPTX
PPT
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
PPTX
разработка бизнес приложений (6)
PPTX
WCF Part 1
PDF
C++ осень 2012 лекция 7
разработка бизнес приложений (7)
Refactoring
Архитектура в Agile: слабая связность
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Konstantin slisenko - Spring Framework
Как пройти собеседование и получить первую работу на Swift
Как разраба
Большие проекты, архитектура и фреймворки.
Выжить с помощью ООП. Максим Гопей
CodeFest 2011. Макаров А. — Как разрабатывается Yii
Survive with OOP
Design Principles
Как писать красивый код или основы SOLID
Aspect-Oriented Programming in PHP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
разработка бизнес приложений (6)
WCF Part 1
C++ осень 2012 лекция 7
Ad

More from Образовательные мероприятия "Netpeak Talks" (11)

PDF
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
PPTX
Netpeak Talks №1: Продажи и развитие клиентов в IT | Червяков Константин | Че...
PDF
Netpeak Talks №17: Как облегчить жизнь клиенту? | Александр Плуток
PPTX
Хороший Email Marketing. Плохой Email Marketing
PPTX
Как поставить написание текстов на поток и почему важно делиться личным опыто...
PDF
Netpeak Talks X | Netpeak: 3 шага за 10 лет
PDF
Netpeak Talks #9 «Эволюция PM: откуда мы пришли и куда двигаться дальше?» | А...
PDF
Netpeak Talks #8 Запуск и ведение PPC проектов в СНГ и на Западе.
PDF
Netpeak Talks #7 Как прокачать в себе дизайнера?
PPTX
Netpeak Talks #7 Продвижение на западных рынках при помощи платформы Quora
PPTX
Netpeak Talks 5: Как сформировать команду маркетинга для продвижения на Запад
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Netpeak Talks №1: Продажи и развитие клиентов в IT | Червяков Константин | Че...
Netpeak Talks №17: Как облегчить жизнь клиенту? | Александр Плуток
Хороший Email Marketing. Плохой Email Marketing
Как поставить написание текстов на поток и почему важно делиться личным опыто...
Netpeak Talks X | Netpeak: 3 шага за 10 лет
Netpeak Talks #9 «Эволюция PM: откуда мы пришли и куда двигаться дальше?» | А...
Netpeak Talks #8 Запуск и ведение PPC проектов в СНГ и на Западе.
Netpeak Talks #7 Как прокачать в себе дизайнера?
Netpeak Talks #7 Продвижение на западных рынках при помощи платформы Quora
Netpeak Talks 5: Как сформировать команду маркетинга для продвижения на Запад

Netpeak Talks #3: Масштабируемое приложение на PHP

  • 2. ● CTO at Serpstat; ● 7+ лет опыта разработки; ● из них 3+ лет работаю с SOA, CQRS и DDD; ● пишу на PHP, JS, Lua; ● придерживаюсь принципов SOLID, DRY, KISS, YAGNI ● за последний год провёл 200+ собеседований
  • 6. ● невозможно отделить и применить класс в другой части приложения ● объект умеет слишком многое ● бизнес логика концентрируется в одном классе ● изменение логики поведения объекта приводит к изменениям в других местах приложения, где это не подразумевалось изначально
  • 7. ● Антипаттерн God Object ● Active Record — паттерн или антипаттерн? ● PHPMailer — в классе 4000+ строк кода и 80+ публичных методов ● CodeIgniter — много классов, нарушающих SRP ● Разработка посредством TDD ● Использовать паттерны: ○ Facade (Фасад) ○ Proxy (Прокси) ○ Extract Class (Выделение частного класса) ○ другие структурные паттерны
  • 8. ● на ранних этапах проектирования, если есть время на реализацию подобных механизмов ● при изменении требований к логике работы приложения или его части
  • 9. ● использование простых связей между двумя классами: User -> Logic ● использование конкретных объектов без абстракций ● Расширять функциональность путём наследования ● Использовать паттерны: ○ Strategy (Стратегия) ○ Template Method (Шаблонный метод) ○ Identity Map (Карта соответствия)
  • 10. Принцип подстановки очень близок к методологии контрактного программирования. ● Предусловия не могут быть усилены в подклассе ● Постусловия не могут быть ослаблены в подклассе ● Правило истории — подкласс не должен создавать новых мутаторов и аксессоров для свойств, определенных в базовом классе ● Методы подкласса не могут генерировать никаких дополнительных исключений, кроме тех, которые сами являются подклассами исключений, генерируемых методами базового класса
  • 11. Реализация наследования класса Square (Квадрат) от класса Rectangle (Прямоугольник) ● выполнять рекомендации с предыдущего слайда ● Template Method (Шаблонный метод)
  • 12. ● Сущности не должны зависеть от методов, которые они не используют ● Сущности должны знать только о тех методах, которые необходимы им в работе ● При изменении метода интерфейса не должны меняться сущности, которые этот метод не используют Laravel 5 — interface Authenticatable
  • 13. 1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. 2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Laravel 5 — class Dumper
  • 16. Общая идея написание слабо связанного кода Принцип Inversion of Control (Инверсия управления) Паттерн, реализующий принцип Dependency Injection Abstract Factory / Factory Method Service Locator Соответствует SOLID? + + -
  • 18. “IoC — это понятие, которое отличает библиотеку от фреймворка.” (с) Martin Fowler В классическом самописном приложении ваш код контролирует внешнее окружение, время и порядок вызова методов библиотек. В случае фреймворка обязанности инвертируются: фреймворк предоставляет доступные точки расширения, через которые он вызывает методы вашего кода. Простой метод обратного вызова или любая реализация паттерна Наблюдатель является примером инверсии. Зная значение понятия IoC, становится ясно, что такое понятие как IoC-контейнер лишено смысла.
  • 19. — это библиотека, фреймворк, программа если хотите, которая позволит вам упростить и автоматизировать написание кода с использованием данного подхода на столько, на сколько это возможно
  • 20. Внедрение зависимостей в .NET Марк Симан На русском языке опубликована на сайте smarly.net Ссылка на книгу: http://bit.ly/2D458yb
  • 21. Код, который я показывал в примерах, добавлен на GitHub https://github.com/NetpeakTalks