я вроде как понял как это делается, например: я создаю интерфейс и класс который его реализует, и в остальном коде я использую не экземпляр класса, а его интерфейс, и если что, могу менять реализацию какого-то метода во всём коде изменив только метод одного класса. Это и есть Dependency Injection, или то что я описал это вообще не то? Может сможете отправить ссылку на статью, я пробовал на хабре парочку прочитать, но вообще не вник что и зачем...
https://metanit.com/sharp/patterns/5.5.php https://metanit.com/sharp/aspnet5/6.1.php
Это dependency inversion
прочитал, и ссылке ниже тоже. Я так и пишу в коде "всегда", но если честно всё равно не совсем понял зачем я это делаю. Мои действия пока исходят от мысли что так выглядит код лучше, и у меня есть отдельно сервис с бизнес логикой, и интерфейс через который я общаюсь с этой логикой. Но я так и не понял в чем главная фишка паттерна, в том что у нас теперь будут зависимости через абстракции?
DI это получение сервисов предоставляющих имплементации класса с необходимым поведением. Плюс еще у этих сервисов есть жизненный цикл для разных ситуаций. Короче это когда ты предоставляешь в код не класс целиком а только его зависимость - интерфейс который он реализует где содержится необходимое поведение типа. Он нужен для уменьшения связности кода, удобства поддержки и тестирования.
" WELCOME TO THE CLUB, BUDDY! "
внедрение зависимостей просто означает, что класс несет отложенную ответственность за получение или предоставление своих собственных зависимостей; вместо этого эта ответственность лежит на том, кто хочет создать экземпляр, который чаще всего создается с помощью IOC. Инверсия зависимостей, которую ты показал в целом заключается в разделении конкретных классов так чтобы эти классы не имели какие-либо прямые ссылки друг на друга DI в первую очередь связан с обеспечением того что типа класс зависит только от абстракций более высокого уровня. Например, интерфейсы существуют на более высоком уровне абстракции, чем конкретный класс. Поэтому мы используем тип интерфейса, а не напрямую класс, который унаследовался Да, эта штука (di) создает излишнюю сложность в самом начале для чтения, но зато, очень легко искать баги и просто расширять ПО.
Обсуждают сегодня