А в чём принципиальное отличие от 3-го принципа? В Open Close principle схемка про то что нужно использовать интерфейс (|main| - > interface < - |Class|) и рассуждения вроде как одинаковые.
Ни автор, ни предыдущий коментатор не ответили на твой вопрос. Из-за того что твой вопрос являеться оксюмороном. Принципиального отличия нет вообще. Потому что это ВООБЩЕ разные принципы. Ты попутал их из-за того что все принципы солид стоять за гибкостю и изменяемость LSP гласит об избежении большых интерфейсов, но распостранению мелкий(болие специализированых) DIP гласит об независимости модулей верхнего уровня и нижнего. Реализация принципа лежит в создании прослойки для этих уровней. Автор взял хорошый пример в этом случаи, но не смог объяснить его. Я советую каждому прочитать статьи о SOLID на wiki
Блин чувак за старание респект, но реально ппц..... Он должен не создавать обьект внутри класса(Client) new DataAccess(); а получать обьект через конструктор класса..... public void Client(DAO someDao) { this.workingDao = someDao} и потом ты его используешь..... Увы урок мимо. Если кто будет смотреть подумайте, тут жестко прописано new DataAccess()......
Да, поддерживаю. Мне кажется логичнее было бы не создавать экземпляр внутри класса, а принимать его в конструктор. Тогда принимаем интерфейс и ничего не знаем о конкретной реализации. А при передачи в конструктор передаем уже конкретный класс
@@alla2662 это уже Dependency Injection a не Dependency Inversion, автор именно хотел подчеркнуть то, что нужно хранить в себе не конкретный класс, а именно абстракцию/интерфейс (и тогда Client знает только об этой абстракции/интерфейсе, не имея ни малейшего понятия какая именно это будет реализация абстракции -> DataAccess или DatabaseAccess или любая другая)
@@alla2662 и да, dependency inversion и injection тяжело представить друг без друга, обычно эти 2 принципа применяются вместе, как раз то, про что вы описали)
Спасибо за коммент)) Хотел сначала указать, что тут об инверсии а не об инжэкшене, но прежде полез подробно узнать в чем разница. И разобрался в этих всех понятиях (IoC, DPI, DI)
наконец-то нашел нормальный видос, где показан процесс Dependency Inversion от начала до конца, спасибо!
Ты первый кто понятно объяснил в чем именно ИНВЕРСИЯ заключается. Спасибо!
очень круто, во всех видео куча сложной бессмысленной информации, а тут на практике все просто и ясно❤
Ты молодчина! 300 уроков по java еще никто в истории не делал!
i realize it is quite off topic but does anyone know of a good place to watch new movies online?
большое спасибо за твои видео! не болей!
Спасибо друг!
четко, спасибо!
Классный канал с классными уроками. Смотрю, практически, с первых серий.
короче, везде используем интерфейсы
А в чём принципиальное отличие от 3-го принципа? В Open Close principle схемка про то что нужно использовать интерфейс (|main| - > interface < - |Class|) и рассуждения вроде как одинаковые.
так это к слову было )3 закон был о том что надо делать программу расширяемой а не лезть в код с изменениями )а тут же говориться о внедрении)
Ни автор, ни предыдущий коментатор не ответили на твой вопрос.
Из-за того что твой вопрос являеться оксюмороном. Принципиального отличия нет вообще. Потому что это ВООБЩЕ разные принципы. Ты попутал их из-за того что все принципы солид стоять за гибкостю и изменяемость
LSP гласит об избежении большых интерфейсов, но распостранению мелкий(болие специализированых)
DIP гласит об независимости модулей верхнего уровня и нижнего. Реализация принципа лежит в создании прослойки для этих уровней.
Автор взял хорошый пример в этом случаи, но не смог объяснить его.
Я советую каждому прочитать статьи о SOLID на wiki
@@yaroslavkostetskiy3665 похоже ты LSP перепутал с ISP (принцип разделения интерфейса).
Блин чувак за старание респект, но реально ппц..... Он должен не создавать обьект внутри класса(Client) new DataAccess(); а получать обьект через конструктор класса..... public void Client(DAO someDao) { this.workingDao = someDao} и потом ты его используешь..... Увы урок мимо. Если кто будет смотреть подумайте, тут жестко прописано new DataAccess()......
Ты перепутал с Dependency INJECTION. В уроке рассматривается термин Dependency INVERSION. Єто разные вещи)
Самое понятное объяснение. Но форма изложения - "мама дорогая!"
Но все равно же Client продолжает знать про DataAccess
Я думаю это всего лиш абстрактный пример. Болия удачный пример будет на 3-х слойной архитектуры
Да, поддерживаю. Мне кажется логичнее было бы не создавать экземпляр внутри класса, а принимать его в конструктор. Тогда принимаем интерфейс и ничего не знаем о конкретной реализации. А при передачи в конструктор передаем уже конкретный класс
@@alla2662 это уже Dependency Injection a не Dependency Inversion, автор именно хотел подчеркнуть то, что нужно хранить в себе не конкретный класс, а именно абстракцию/интерфейс (и тогда Client знает только об этой абстракции/интерфейсе, не имея ни малейшего понятия какая именно это будет реализация абстракции -> DataAccess или DatabaseAccess или любая другая)
@@alla2662 и да, dependency inversion и injection тяжело представить друг без друга, обычно эти 2 принципа применяются вместе, как раз то, про что вы описали)
В чем отличие от Композиции?
Автор, нужно признавать ошибки т.н иньекция не произошла
Спасибо за коммент)) Хотел сначала указать, что тут об инверсии а не об инжэкшене, но прежде полез подробно узнать в чем разница. И разобрался в этих всех понятиях (IoC, DPI, DI)