2015-08-10 2 views
2

Второго заявление Inversion Принципа зависимых пакетов гласит:Второго утверждения принципа Инверсии зависимых пакеты

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

Что означает «подробности» в этом контексте?

+0

Если вы не придерживаетесь этой второй части определения, вы реализуете [просачивающиеся абстракции] (https://en.wikipedia.org/wiki/Leaky_abstraction). – Steven

ответ

1

Я предпочитаю думать о абстракциями как «, что итоге я хочу получить», и о детали как «как я хочу, чтобы получить результат».

Принцип означает, что изменение деталей (например, время жизни объекта, алгоритм, точность и т. Д.) Не изменяет абстракции.

0

Мое понимание этого заключается в том, что оно тесно связано с первым принципом: «Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций». Реализация этого, как правило, осуществляется в форме интерфейса, который используют как ваши классы высокого, так и низкого уровня, чтобы разговаривать друг с другом.

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

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

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

1

Абстракции могут быть поведенческими аспектами, которые могут быть использованы путем использования кода в терминах интерфейсов. Любой класс/код, который является высоким или низким уровнем, будет связываться с использованием абстракции и не использовать операторов. Эти классы определяются как «детали».

0

Позвольте мне поделиться своим видением

Я считаю, что этот термин обычно используется в контексте отношений между 2 компонентов А и В, скажем (A использует B, A -> B). Так что просто «абстракция» не имеет для меня никакого смысла. Что имеет смысл что-то вроде «абстракция B из точки А зрения»

Моя попытка построить строгое определение (более или менее):

Если А использует В то абстракций B из точки А зрения является минимальным и достаточным набор информации A должен знать о B, чтобы использовать его надлежащим образом.

  • Минимальный: если ваша абстракция содержит smth A, можно опустить - ваш модуль A использует данные B. Это плохо. Автор (ы) B может решить изменить его, что приведет к нарушению связи.
  • Достаточная: если А не может использовать B должным образом не то, что не является частью вашей «абстракции», это означает, что она должна стать частью вашей абстракции

Я считаю, что главная цель этой точки (подробности, абстракция) - это быстрый способ упомянуть либо то, что вы можете (детали) изменить, не нарушая связь A-> B, или что-то, что вы не можете изменить эту легкую (абстракцию) в правильной A -> B usecase.

Смежные вопросы