Size: a a a

2020 August 27

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
this.
Так di не про то:D
Разве?   Депенденси инвершн вроде ж как раз об этом, типо ты должен добиться смены апи так чтобы контроллер это не почувствовал
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Sergey Benzenko
Telegram
.NET Разработчик
День четыреста шестидесятый. #DesignPatterns
Принципы SOLID.
3. Принцип подстановки Лисков (LSP)
«Должна существовать возможность использовать объекты производного класса вместо объектов базового класса. Это значит, что объекты производного класса должны вести себя согласованно, согласно контракту базового класса». (Уорд Каннингем. Liskov Substitution Principle).
Наследование обычно моделирует отношение «ЯВЛЯЕТСЯ» (IS-A Relationship) между классами. Говорят, что экземпляр наследника также ЯВЛЯЕТСЯ экземпляром базового класса, что выражается в возможности использования экземпляров наследника везде, где ожидается использование базового класса. Данный вид наследования называется также наследованием подтипов. Принцип подстановки Лисков призван помочь в корректной реализации этого вида наследования, или отказаться от наследования, если его корректная реализация невозможна.

Для чего нужен принцип подстановки Лисков
Основной смысл любой иерархии наследования в том, что она позволяет использовать базовые классы полиморфным…
Оп, по первой фразе вспомнил сразу, в какой раз уже ваш канал спасает
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Барсик [SpamBlock]
Не юзать di , сунуть всю логику в один класс
Сунуть всю логику в один класс это нарушение сингл респонсибилити
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
День четыреста семьдесят пятый. #DesignPatterns
Принцип инверсии зависимостей (DIP). Примечание
DI vs. DIP vs. IoC
Существуют три схожих понятия, связанных с передачей зависимостей, в каждом из которых есть слово «инверсия» (inversion) или «зависимость» (dependency):
1. IoC — Inversion of Control (инверсия управления);
2. DI — Dependency Injection (внедрение зависимостей);
3. DIP — Dependency Inversion Principle (принцип инверсии зависимостей).
Эти термины часто используют несогласованно или путают.

1. Inversion of Control
Инверсия управления — это некий абстрактный принцип, набор рекомендаций для написания слабо связанного кода. В обычной программе программист сам решает, в какой последовательности делать вызовы процедур. Но, если используется фреймворк, программист может разместить свой код в определённых точках выполнения (используя функции обратного вызова или подобные механизмы), затем запустить «главную функцию» фреймворка, которая обеспечит всё выполнение и будет вызывать код программиста тогда, когда это будет необходимо. Как следствие, происходит утеря контроля над выполнением кода — это и называется инверсией управления (фреймворк управляет кодом программиста, а не программист управляет фреймворком).
IoC-контейнер – это фреймворк для реализации автоматического внедрения зависимостей. Он управляет созданием, жизненным циклом объектов и внедрением зависимостей в класс, тем самым «изымая» контроль над зависимостями из класса.

2. Dependency Injection
Внедрение зависимостей — это механизм передачи классу его зависимостей:
- Через конструктор (Constructor Injection) передаются обязательные зависимости класса, без которых работа класса невозможна.
- Через метод (Method Injection) передаются зависимости, которые нужны лишь одному методу, а не всем методам класса.
- Через свойство (Property Injection) чаще устанавливаются лишь необязательные зависимости (обычно инфраструктурные), для которых существует значение по умолчанию (например, свойство Logger содержит разумное значение по умолчанию, но в некоторых случаях может быть заменено присваиванием другого значения свойству).
Очень важно понимать, что DI-паттерны не говорят о том, как должна выглядеть зависимость, к какому уровню она относится, сколько их должно быть и т. п. Это лишь инструмент передачи зависимостей от одного класса другому.

3. Dependency Inversion Principle
Принцип инверсии зависимости говорит о том, какого вида зависимости необходимо передавать классу извне, а какие зависимости класс должен создавать самостоятельно. Важно, чтобы зависимости класса были понятны и важны вызывающему коду. Зависимости класса должны располагаться на текущем или более высоком уровне абстракции. Другими словами, не любой класс, которого требует интерфейс в конструкторе, следует принципу инверсии зависимостей.
Например, в класс создания отчётов можно внедрить зависимости от IStringBuilder для построения текста отчёта, либо от ISocket для отправки отчётов по сети. Но эти абстракции находятся на несколько уровней ниже
уровня формирования и отправки отчетов и не соответствуют принципу инверсии зависимостей, поскольку оперируют более низкоуровневыми понятиями, чем требуется. На этом уровне нужно оперировать не строками и сокетами, а отчетами. В результате в данном примере используется внедрение зависимостей (DI), но данный код не следует принципу инверсии зависимостей (DIP).

Итого
Инверсия управления (IoC) говорит об изменении потока исполнения, присуща фреймворкам и функциям обратного вызова и не имеет прямого отношения к управлению зависимостями. Внедрение зависимостей (DI) — это инструмент передачи классу его зависимости через конструктор, метод или свойство. Принцип инверсии зависимостей (DIP) — это принцип проектирования, который говорит, что классы должны зависеть от высокоуровневых абстракций.

Источник: Тепляков С. "Паттерны проектирования на платформе .NET." — СПб.: Питер, 2015. Глава 21.
источник

t

this. in CODE BLOG / C#
Барсик [SpamBlock]
Разве?   Депенденси инвершн вроде ж как раз об этом, типо ты должен добиться смены апи так чтобы контроллер это не почувствовал
Dependenci inversion это об использовании абстракций
Dependenci injection несколько иное
источник

AK

Andrew Kravchuk in CODE BLOG / C#
А ди это если ты оперируешь конкретными типами
источник

t

this. in CODE BLOG / C#
Andrew Kravchuk
Сунуть всю логику в один класс это нарушение сингл респонсибилити
+
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Хардкодишь грубо говоря
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
this.
Dependenci inversion это об использовании абстракций
Dependenci injection несколько иное
Второе часть первого)
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Andrew Kravchuk
Хардкодишь грубо говоря
Да-да, я))
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Так и делал раньше😅
источник

t

this. in CODE BLOG / C#
Барсик [SpamBlock]
Второе часть первого)
Второе включает первое но первое не часть второго
источник

AK

Andrew Kravchuk in CODE BLOG / C#
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
this.
Второе включает первое но первое не часть второго
Ох уж эта булевая алгебра
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Тьху, не то
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Теория множеств
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Вроде))
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Да
источник

Б[

Барсик [SpamBlock]... in CODE BLOG / C#
Благо я дискретку закрыл уже
источник

AK

Andrew Kravchuk in CODE BLOG / C#
Барсик [SpamBlock]
Благо я дискретку закрыл уже
Жиза
источник