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

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

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

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

Почему?

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

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

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

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

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

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

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

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

  2. Дмитрий

    Благодарю подробное разъяснение столь неоднозначного материала!
    Всегда мучался вопросами касающимися именно архитектуры приложения.
    Эти принципы хорошо отвечают на половину этих вопросов)

    1. Maxyc Webber (автор)

      лайк

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

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

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