В принципе, основная идея DIP является:
- модули высокого уровня должны не зависят от модулей низкого уровня. Оба должны зависят от абстракций.
- Абстракции следует не зависит от деталей. Детали должны зависят от абстракций.
Как вы можете видеть, это говорит должен и не обязательным. Это не запрещает вам ничего делать.
Если ваши классы composite of/aggregate to
другие специфические classes
(не interfaces/abstract classes
), это нормально! Ваш код все еще будет компилироваться и запускаться, никакие предупреждения не будут отображаться, говоря вам: «Эй, вы нарушаете DIP». Поэтому я думаю, что ответ на ваш вопрос: Нет, это не.
Представьте, что ваша система состоит из тысячи классов, вы можете просто применить DIP к 2 классам и иметь один из них, зависит от 3-го конкретного класса (не interfaces/abstract classes
). Пока ваша проблема решена, ничего не имеет значения. Поэтому старайтесь держать свое решение коротким & простым -> легко понять. Поверьте мне, вы найдете это ценным через месяц после того, как вы оглянетесь на свое решение.
DIP - это руководство, которое говорит вам, что делать, когда вы сталкиваетесь с определенным набором проблем, чтобы решить их. Это не волшебный ориентир, он стоит за счет: сложность. Чем больше вы применяете DIP, тем сложнее будет ваша система. Поэтому используйте его с умом. Чтобы поддержать этот момент, я рекомендую вам ознакомиться с этой ссылкой (взято из книги Head First: Design Patterns
). Получите доступ к этому link (это файл в формате PDF) и в верхней строке перейдите на страницу 635/681
. Или, если вы достаточно ленивы, просто прочитать ниже цитату:
Your Mind на Patterns
новичку использует шаблоны везде. Это хорошо: новичок получает много опыта и использует шаблоны. Новичок также считает, что «чем больше узоров я использую, тем лучше дизайн». Новичок начинающих узнает, что это не так, что все проекты должны быть как можно проще . Сложность и модели следует использовать только там, где они необходимы для практической расширяемости.
В процессе обучения Промежуточный ум начинает видеть, где нужны шаблоны, а где нет. Промежуточный ум по-прежнему пытается уместить слишком много квадратных узоров в круглые отверстия, но также начинает видеть, что шаблоны могут быть адаптированы для ситуаций, когда канонический рисунок не подходит.
Ум Zen способен видеть узоры, в которых они подходят естественным образом.Ум Дзена не одержим использованием шаблонов; скорее, он ищет простых решений, которые наилучшим образом решают проблему. Разум Дзэн думает в терминах принципов объекта и их компромиссов. Когда возникает потребность в шаблоне , разум Дзэн применяет его, хорошо зная, что ему может потребоваться адаптация . Разум Дзэн также видит отношения к подобным шаблонам и понимает тонкости различий в намерениях связанных шаблонов. Разум Дзэн также является сознанием начинающего - он не позволяет всему этому знанию шаблона чрезмерно влиять на дизайн решений.
Наконец, я укажу вам на Банды Четырех шаблон проектирования, которые делают использование DIP: Strategy
Пример задачи: A Character
может использовать 3 вида оружия: Hand
, Sword
, & Gun
, Он (Character
) может поменять свое текущее оружие всякий раз, когда захочет.
Анализ: Это очень типичная проблема. Трудная часть заключается в том, как обрабатывать обмен оружием во время выполнения.
кандидат решение со Стратегией: (всего SketchUp):

weapon = new Hand();
weapon.Attack(); // Implementation of Hand class
weapon = new Sword();
weapon.Attack(); // Implementation of Sword class
weapon = new Gun();
weapon.Attack(); // Implementation of Gun class
Другие шаблоны проектирования & рамки, которые делают использование DIP:
Большое вам спасибо за ваш ответ! У меня такое чувство, что ты полностью заботишься. Часть, касающаяся использования опыта и дизайна, вероятно, сэкономит мне много времени. Вероятно, вы заставите меня сэкономить много времени, блуждая между различными способами использования шаблонов дизайна. Большое спасибо за ваш ответ :). – Plouff
Я думал, что чем сложнее система, тем больше вы будете применять DIP. –
@AdrianIftode: Если применение DIP сделало систему менее сложной, я бы назвал ее «плохо разработанной» системой, а не «сложной». Здесь это справочный материал, в котором упоминается, как система может быть более сложной при установке шаблонов проектирования: https://youtu.be/gwIS9cZlrhk?t=4153 –