Category: solid

12
Окт
2020

Разрыв циклических зависимостей с помощью Принципа инверсии зависимостей

В книге Роберта Мартина "Чистая Архитектура" написано:

Существует два метода для того, чтобы разорвать циклическую зависимость:

Применить принцип инверсии зависимостей (Dependency Inversion Principle; DIP) . В этом случае, как …

11
Июн
2020

Как разделить классы, используя композицию и принцип ответственности?

У меня есть класс документов:

class Document {
versions: Version[] = [];
}

Он имеет композицию в виде массива версий.

Предположим, мне нужно получить все версии документов:

class Document {
versions: Version[] = [];

ge…

28
Фев
2020

Принцип DIP: абстракции и композиция

Как гласит принцип DIP из SOLID:

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

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

В о…

27
Фев
2020

На какие сущности (классы) разделить такую задачу, с точки зрения SOLID?

Требуется импортировать csv-файл с пользователями в CRM-систему.

У этой CRM-системы есть свой API для работы с пользователя (класс с CRUD методами).

Я предполагаю, что нужно разделить на две сущности:

класс, который будет на вход получ…

09
Фев
2020

Принцип DIP из SOLID

Правильно ли я понял принцип DIP из SOLID?
Если класс A имеет зависимость от класса B, то при описании класса А зависимость нужно указать через абстракцию, т.е.:

interface BInterface { … }

class B implements BInterface { … }

class …

08
Фев
2020

Принцип DIP из SOLID и Autowiring из DI-контейнеров

Принцип DIP гласит: зависимости должны быть на абстракциях, а не от конкретной реализации.

Например такой код:

public function log(LoggerInterface $logger) { }

Зависимость от интерфейса.

При использовании DI-контейнеров с autowiring …

26
Июл
2019

Принципы SOLID. Часть 5. Принцип инверсии зависимостей

От автора: этим уроком мы закрываем небольшой цикл видео по разбору SOLID принципов. Принцип инверсии зависимостей важнейший принцип в объектно-ориентированном программировании на PHP, использование которого значительно уменьшает связность всего проекта в целом. Традиционно начнем с определения. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не […]

06
Июн
2019

Принципы SOLID. Часть 4. Принцип разделения интерфейса

От автора: интерфейсы – это прекрасный механизм для определения клиентской реализации, но бездумное и повсеместное их создание приносит больше негативных последствий, чем ожидаемых положительных моментов. В этом уроке будет рассмотрен четвертый принцип SOLID — принцип разделения интерфейса, который призван решить указанную выше проблему. Как правило, изучив теорию по интерфейсам, новички сразу же начинают внедрять их […]

04
Июн
2019

Принципы SOLID. Часть 3. Принцип подстановки Барбары Лисков

От автора: первые два принципа, рассмотренные ранее, по большому счету довольно просты, логичны и очень просты для понимания. Но вот принцип подстановки Барбары Лисков, особенно его оригинальная формулировка, многих загоняет в тупик. Поэтому в текущем уроке, на двух примерах, я постараюсь простым языком объяснить суть принципа и к чему приводит его нарушение. Основная формулировка рассматриваемого […]

30
Май
2019

Принципы SOLID. Часть 2

От автора: во втором уроке серии будет рассмотрен принцип открытости/закрытости, который гласит – «классы проекта должны быть открыты для расширения, но закрыты для изменения». Таким образом, из этого видео Вы узнаете, в чем преимущество указанного подхода, каким образом можно расширять классы без их изменения и как описать класс, чтобы он удовлетворял первому и второму принципу […]

29
Май
2019

Принципы SOLID. Часть 1

От автора: объектно-ориентированное программирование – это подход, благодаря которому мы думаем и оперируем в приложении конкретными сущностями, в частности объектами, а не некоторыми абстрактными понятиями. Другими словами – это не только способ написания кода и использования определенных инструментов, это еще и способ мышления и совсем другой подход к организации логики будущего проекта. При этом подразумевается […]