Skip to content

maxlen/design-patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Famous design patterns on PHP

(GRASP Patterns & GoF Patterns)

GRASP Patterns:

  • Information Expert code https://habr.com/ru/companies/otus/articles/491636/ Информацию обрабатываем там, где она содержится.

  • Creator code https://habr.com/ru/companies/otus/articles/505618/ - Cоздаем объекты там, где они нужны.

  • Controller - Выносим логику многопоточности в отдельный класс или компонент.

  • Low Coupling + High Cohesion code https://habr.com/ru/companies/otus/articles/505852/

    • Проектируем классы с однородной бизнес-логикой и минимальным количеством связей между собой.
  • Polymorphism https://habr.com/ru/companies/otus/articles/507600/ - Различные варианты поведения системы при необходимости оформляем в виде полиморфных вызовов.

  • Pure Fabricationне стесняемся создавать классы, не имеющие аналог в предметной области, если это необходимо для соблюдения Low Coupling и High Cohesion.

  • Indirection https://habr.com/ru/companies/otus/articles/521476/Любой класс вызываем через его интерфейс.

  • Protected Variations https://habr.com/ru/companies/otus/articles/521476/ — применяя все вышесказанное, получаем устойчивый к изменениям код.

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

GoF Patterns

Creational (Порождающие):

Structural (Структурные):

Behavioral (Поведенческие):

Getting started

git clone [email protected]:maxlen/design-patterns.git

Run project

# Go to project directory
cd design-patterns

# run particular pattern (example)
php src/gof/abstract-factory.php

Certificate

Scheme

About

GRASP Patterns & GoF Patterns

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages