Второго заявление Inversion Принципа зависимых пакетов гласит:Второго утверждения принципа Инверсии зависимых пакеты
«Абстракция не должен зависеть от деталей Деталь должна зависеть от абстракций ..»
Что означает «подробности» в этом контексте?
Второго заявление Inversion Принципа зависимых пакетов гласит:Второго утверждения принципа Инверсии зависимых пакеты
«Абстракция не должен зависеть от деталей Деталь должна зависеть от абстракций ..»
Что означает «подробности» в этом контексте?
Я предпочитаю думать о абстракциями как «, что итоге я хочу получить», и о детали как «как я хочу, чтобы получить результат».
Принцип означает, что изменение деталей (например, время жизни объекта, алгоритм, точность и т. Д.) Не изменяет абстракции.
Мое понимание этого заключается в том, что оно тесно связано с первым принципом: «Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций». Реализация этого, как правило, осуществляется в форме интерфейса, который используют как ваши классы высокого, так и низкого уровня, чтобы разговаривать друг с другом.
Ну, это в основном уже соответствует второму принципу, потому что наши детали, являющиеся конкретными реализациями классов, которые используют этот интерфейс, теперь зависят от абстракции, являющейся интерфейсом, который теперь используют классы.
Далее абстракции теперь больше не зависят от самих классов, поскольку теперь они живут за интерфейсом, который оба класса реализовали, и поэтому могут свободно меняться (кроме подписей, конечно), не внося изменения в детали необходимы конкретные реализации.
Я не думаю, что я был таким ясным, как мне нравится, но я надеюсь, что это поможет.
Абстракции могут быть поведенческими аспектами, которые могут быть использованы путем использования кода в терминах интерфейсов. Любой класс/код, который является высоким или низким уровнем, будет связываться с использованием абстракции и не использовать операторов. Эти классы определяются как «детали».
Позвольте мне поделиться своим видением
Я считаю, что этот термин обычно используется в контексте отношений между 2 компонентов А и В, скажем (A использует B, A -> B). Так что просто «абстракция» не имеет для меня никакого смысла. Что имеет смысл что-то вроде «абстракция B из точки А зрения»
Моя попытка построить строгое определение (более или менее):
Если А использует В то абстракций B из точки А зрения является минимальным и достаточным набор информации A должен знать о B, чтобы использовать его надлежащим образом.
Я считаю, что главная цель этой точки (подробности, абстракция) - это быстрый способ упомянуть либо то, что вы можете (детали) изменить, не нарушая связь A-> B, или что-то, что вы не можете изменить эту легкую (абстракцию) в правильной A -> B usecase.
Если вы не придерживаетесь этой второй части определения, вы реализуете [просачивающиеся абстракции] (https://en.wikipedia.org/wiki/Leaky_abstraction). – Steven