Инверсия зависимостей

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

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

Высокий уровень в том смысле, что он использует другие более мелкие, более специализированные классы для выполнения чего-то, а затем принимает некоторые решения

Почему?

Мы уже видели отличный пример этого в предыдущей части этой статьи. Если вы использовали сервис генерации PDF-файлов и ваш код был завален new ABCService() классом, то день, когда бизнес решил использовать какой-то другой сервис, запомнится навсегда! Скорее, мы должны использовать общую форму этой зависимости (создать интерфейс для PDF-сервисов, то есть), и позволить чему-то другому обрабатывать ее экземпляр и передавать его нам (в Laravel мы видели, как сервис-контейнер помог нам это сделать).

Если вы ищете практический пример, вернитесь к той части этой статьи, где мы обсудим, как спасти наш код от необходимости зависеть исключительно от MilkyWay класса PDF.

Автор: Анкуш Тхакур 9 ноября 2020 года

Если вы нашли эту статью полезной, пожалуйста, оставьте комментарий. Это подтвердит мое представление о том, что разработчики действительно изо всех сил пытаются понять смысл этих “продвинутых” концепций, и я буду мотивирован писать на другие подобные темы. До скорого! 🙂

Рейтинг
( 4 оценки, среднее 5 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Комментарии: 1
  1. YmNik

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

    Стиль изложения тоже супер.

    P. S. Пошел читать про контейнеры и инъекции зависимостей, а ссылка на твой сайт переходит в закладки полезного чтива. Пиши еще.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.