|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Всем привет, хочется реализовать следующую конструкцию. Есть базовый абстрактный класс, который инжектит в себя зависимость, которая нужна всем потомках. И необходимо освободить потомков от внедрения этой же самой зависимости. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Такой вариант требует внедрения IMediator в конструктор WarehouseController, хотелось бы полностью спрятать эту зависимость в базовом классе ApiControllerBase. Раньше скорее всего проканал бы вариант с PropertyInjection, но заводской ASP Core DI-контейнер не имеет такой функциональности. Подскажите как можно сделать, или такой вариант зло и все равно необходимо в каждом потомке внедрять зависимость. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 13:26 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Чем тебе не нравится инъекция в свойство, которое ты можешь объявить в базовом классе? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 13:34 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
vb_sub но заводской ASP Core DI-контейнер не имеет такой функциональности. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 13:41 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Shocker.Pro, для контроллеров и POCO не работает- единственное где заводится- в Blazor-компоненте. Внедренный сервис посредством [Inject] атрибута все время null. Пробовал максимально открывать класс, его свойства и сеттеры-не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 14:40 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
а, мне казалось, что использовал Ну фабрику можешь сделать простейшую, чтобы инициализировала свойство. В общем, можно даже регистрировать сразу с мини-фабрикой в виде лямбды, но если есть единый базовый класс, можно организовать и фабрику. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 15:58 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
vb_sub или такой вариант зло Зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:30 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
vb_sub Такой вариант требует внедрения IMediator в конструктор WarehouseController, хотелось бы полностью спрятать эту зависимость в базовом классе ApiControllerBase. Типа экономия? :) Ох, лень же писать конструктор в каждом контроллере. Вы можете поступить так: Код: c# 1. 2. 3. 4.
Всё. Но это говнокод и рано или поздно вы или кто-то другой будет материть вас за подобную херню :) Отдельно про медиатор. Вы скорее всего пытаетесь наступить на грабли, которые уже знатно врезали по многим лбам. Полностью делать всё через медиатор. Ох и пожалеете об этом ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 22:00 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt vb_sub Такой вариант требует внедрения IMediator в конструктор WarehouseController, хотелось бы полностью спрятать эту зависимость в базовом классе ApiControllerBase. Типа экономия? :) Ох, лень же писать конструктор в каждом контроллере. Вы можете поступить так: Код: c# 1. 2. 3. 4.
Всё. Но это говнокод и рано или поздно вы или кто-то другой будет материть вас за подобную херню :) Отдельно про медиатор. Вы скорее всего пытаетесь наступить на грабли, которые уже знатно врезали по многим лбам. Полностью делать всё через медиатор. Ох и пожалеете об этом Типа экономия? :) Нет, хотелось бы сделать код почище. Вы скорее всего пытаетесь наступить на грабли, которые уже знатно врезали по многим лбам. К каким косякам приведет медиатор? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2021, 11:55 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
vb_sub Типа экономия? :) Нет, хотелось бы сделать код почище. Если у вас и правда все контроллеры должны использовать медиатор, тогда используйте код, который я привёл, или его вариации. vb_sub К каким косякам приведет медиатор? Уменьшение связности, справиться с которой будет невозможно. Это приведёт к тому, что логика будет размазана по модулям, как ошмётки кишок по стенам новобранца, доигравшегося с гранатой :) В противовес к этому сильная зависимость от медиатора, как у наркомана со стажем от героина. Ничего нельзя будет сделать без медиатора в принципе. Проблемы с отладкой как бонус. Навигация по коду -- давай до свидания! Это что навскидку. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 02:40 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Похоже на то, что злой дух ServiceLocator периодически воскресает в различных реализациях, но честно говоря все лучше и лучше с каждой реинкарнацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 11:03 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Контроллер по сути и так является медиатором ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 13:49 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Roman Mejtes, Если бы контроллер был один. Но их много. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 15:51 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
очень плохая идея, если какой то базовый класс, будет инжектировать в тихую какую то зависимость. по моему, это просто жопа. наследование сегодня вообще под гонениями :), но автор хочет поддать огня и выстрелить себе в ногу сам. Суть в том, что вам тут не нужен базовый класс. "Базовый класс" нужно вынести в сервис передам ему эту часть базового функционала, этот новый сервис будет иметь ту самую зависимость, что вы хотите передать в базовый класс. А "порожденные классы" от "базового" будут иметь зависимость к этому "базовому классу". Делать то, что вы задумали, я бы не стал, и не дал бы не одному человеку, который со мной бы это делал, даже если бы он убеждал меня в крутости идеи и что это даст хоть какой то полезный результат (если это вообще возможно) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 23:20 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Roman Mejtes, Соглашусь с тем, что плохая идея инжектить зависимость не через конструктор, с точки зрения идеального дизайна архитектуры. Не соглашусь с тем, что на практике это прям всегда плохая идея. Так как тотальное слепое следование идеальному дизайну, пытаясь соблюдать кристальную чистоту кода, безусловно следуя всем принципам и подходам "в лоб", легко может привести к тому, что комфортная и простая разработка будет пожертвована идеалам. Пытаясь не выстрелить в ногу мы можем вообще получить ружьё, которое не стреляет в принципе. Или для совершения выстрела потребуется привлечь профессиональную команду инженеров. В общем, разработка это в первую очередь компромисс. Иногда нужно выбирать между двух зол. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 02:32 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Иногда нужно выбирать между двух зол. Тут, скорее, между добром и злом :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 09:38 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Идея с сервисом от Романа мне понравилась, но она по сути эта просто декоратор над прямым внедрением зависимости в конструктор. То есть вместо внедрения Imediator в каждый контроллер будет внедряться ImediatorService-просто дополнительный уровень абстракции. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 09:45 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Я еще могу понять (с огромнейшим натягом) наследование ради наследования какого-нибудь нетривиального функционала, но наследование ради наследования одного поля это откровенное зло. Да и вообще наследование постоянно абьюзят так, что его вообще запретить впору. Можно было бы, например, в csc добавить какую-нибудь опцию типа "sealed by default" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 09:57 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat, Это всё хейтеры. Хейтят всё, что нынче не модно. Спустя пять лет будут наследование нахваливать, откроют его заново и экое дивное диво, смотрите! ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 20:22 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Это всё хейтеры Рихтер, Саттер и АА - компашка хейтеров ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 22:17 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat hVostt Это всё хейтеры Рихтер, Саттер и АА - компашка хейтеров У них как раз по существу всё, наследование не хейтится, а объясняются последствия при неправильном дизайне наследования. Но это вырывается из контекста, оставляя только "наследование -- зло" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 09:33 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Но это вырывается из контекста, оставляя только "наследование -- зло" :) Ну так и я ведь не писал, что наследование это Зло. Сказал только что его абьюзят. Бухлом тоже некоторые пассажиры абьюзят, но это не значит что совсем никогда нельзя побухать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 04:30 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat hVostt Но это вырывается из контекста, оставляя только "наследование -- зло" :) Ну так и я ведь не писал, что наследование это Зло. Сказал только что его абьюзят. Бухлом тоже некоторые пассажиры абьюзят, но это не значит что совсем никогда нельзя побухать Ну это игра слов :) На деле, то "абьюзят" приводит к крестовым походам с факелами и вилами к тем, кто наследование успешно применяет. fkthat Да и вообще наследование постоянно абьюзят так, что его вообще запретить впору . :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 11:56 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Ох, лень же писать конструктор в каждом контроллере. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2021, 21:52 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Antonariy, А asp.net core тем временем вообще практикуется инъекция в делегаты :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 00:34 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt инъекция в делегаты А это что за зверь такой? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 00:58 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 01:08 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Antonariy hVostt Ох, лень же писать конструктор в каждом контроллере. Корень зла тут в наследовании Не в самом наследовании, а в его использовании как корявой замены композиции, потому что кажется, что "так проще". А потом всё это начнет разрастаться и выяснится, что в некоторых контроллерах это поле вообще не нужно, а в некоторых оно вроде как и нужно, но немного другое. И вот тут начнутся фейверки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 01:33 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
Хм... А что там необычного, и при чем там делегаты? Всему что там написано уже сто лет в обед. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 01:39 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Корень зла тут в наследовании Не в самом наследовании, а в его использовании как корявой замены композиции, потому что кажется, что "так проще". А потом всё это начнет разрастаться и выяснится, что в некоторых контроллерах это поле вообще не нужно, а в некоторых оно вроде как и нужно, но немного другое. И вот тут начнутся фейверки. В моей практике с земными реальными задачами, ребята, которые пишут говнокод с наследованием пишут точно такой же, а то и хуже, говнокод и без наследования. Применяется ли наследование, или не применяется -- особой роли не играет. Грамотные ребята используют наследование там, где это уместно и никаких проблем с этим нет. То, что ты говоришь похоже на ситуацию, когда ударился ногой об скамейку == скамейка виновата == скамейки зло!! Это никак не относится к взрослому осмысленному и грамотнонму применению инструментов. Никаких фейерверков не начинается. fkthat Хм... А что там необычного, и при чем там делегаты? Всему что там написано уже сто лет в обед. Либо ты не внимательный, либо покажи что-то подобное в ASP.NET MVC 5 хотя бы. Уже не будем откатываться на сто лет назад. Давай в классическом ASP покажи такое же. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 11:18 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Корень зла тут в наследовании Рекомендую начинать думать самостоятельно, а не мыслить шаблонами или чужими бредовыми утверждениями :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 11:20 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt ребята, которые пишут говнокод с наследованием пишут точно такой же, а то и хуже, говнокод и без наследования Но в данном случае грядет говнокод почему-то именно с наследованием hVostt Либо ты не внимательный, либо покажи что-то подобное в ASP.NET MVC 5 хотя бы. При чем тут это - там DI встроенного вообще не было. Я просто так и не понял, при чем там по твоей ссылке именно делегаты и их инжекция. Сначала даже подумал, что в дотнет delegate factories завезли, как в автофаке, но зашел и не увидел ничего нового. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 16:39 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Но в данном случае грядет говнокод почему-то именно с наследованием Есть правило: предпочитайте композицию наследованию — является вспомогательным советом, с какой стороны подходить к построению архитектуры классов. И для этого есть обоснование. Обоснования для утверждения "наследование — зло", которое хотя бы чуть-чуть дотягивало до аналогичного утверждения для goto, нет и пока не предвидится. fkthat При чем тут это - там DI встроенного вообще не было. Я просто так и не понял, при чем там по твоей ссылке именно делегаты и их инжекция. Сначала даже подумал, что в дотнет delegate factories завезли, как в автофаке, но зашел и не увидел ничего нового. Ну вот же: Код: c# 1.
Как видишь, инъекция в аргументы метода, можно добавить ещё сервисов. Это -- новое. Если нет, покажи как это работало раньше в ASP.NET MVC 5, пусть хоть и с автофаком ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 18:18 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Как видишь, инъекция в аргументы метода, можно добавить ещё сервисов. Ну и при чем здесь все-таки какие-то делегаты? И это не совсем иньекция - это скорее сервис-локатор, который запрятан в фреймворке и вызывается при вызове Invoke. Такая же тема есть для акций контроллеров, но с совершенно произвольным методом такой фокус не пройдет, да и невозможен хотя бы из-за синтаксиса C#. hVostt Это -- новое. Время просыпаться . Новым это было в 2.1. hVostt покажи как это работало раньше в ASP.NET MVC 5, пусть хоть и с автофаком В МВЦ5 вообще мидлеваров не было. Был со стороны OWIN, который, кстати, с автофаком интегрировался . В Invoke он инжектить не мог, но там и нужды такой не было, т.к. инстанс мидлевара создавался per request. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 19:12 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Ну и при чем здесь все-таки какие-то делегаты? Еси провалишься вглубь фреймворка -- узнаешь :) fkthat И это не совсем иньекция - это скорее сервис-локатор, который запрятан в фреймворке и вызывается при вызове Invoke. В смысле "не совсем инъекция"? )) А ты тогда не совсем человек, а просто сборище молекул :) Самая что ни на есть чистая инъекция. DI вообще работает через сервис-локатор, иначе откуда он будет зависимости брать, из космоса чтоли? Такое ощущение, что уже аргументы из пальца высасываешь, чисто ради спора. fkthat hVostt Это -- новое. Время просыпаться . Новым это было в 2.1. Ну так и проснись уже! Вот моё оригинальное сообщение: hVostt Antonariy, А asp.net core тем временем вообще практикуется инъекция в делегаты :) Я как бы про весь asp.net core говорю, очевидно, сравнивая с его предшественником. fkthat В МВЦ5 вообще мидлеваров не было. Был со стороны OWIN, который, кстати, с автофаком интегрировался . В Invoke он инжектить не мог, но там и нужды такой не было, т.к. инстанс мидлевара создавался per request. OWIN был с подобной архитекторой. Нужды и в asp.net core такой тоже нет, прям острой. Или всё сломается и не взлетит без этой фичи? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2021, 19:26 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt В смысле "не совсем инъекция"? В смысле, что это специфичная иньекция, работающая только в конкретном случае, а не где угодно, как иньекция в конструктор. hVostt DI вообще работает через сервис-локатор, иначе откуда он будет зависимости брать, из космоса чтоли? DI может быть вообще без какого-либо контейнера или фреймворка. DI говорит только о разделении создания зависимости и её использования. hVostt Нужды и в asp.net core такой тоже нет, прям острой. Или всё сломается и не взлетит без этой фичи? В коре мидлеваре это синглетон. Если бы не было этой фичи, то это пришлось бы делать обходными путями (например, с помощью фабрики). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 00:32 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat В смысле, что это специфичная иньекция, работающая только в конкретном случае, а не где угодно, как иньекция в конструктор. Зависимость внедряется? Внедряется :) fkthat DI может быть вообще без какого-либо контейнера или фреймворка. DI говорит только о разделении создания зависимости и её использования. Ты наверное путаешь с IoC. fkthat В коре мидлеваре это синглетон. Если бы не было этой фичи, то это пришлось бы делать обходными путями (например, с помощью фабрики). Что значит "пришлось бы"? :) https://docs.microsoft.com/en-US/aspnet/core/fundamentals/middleware/extensibility?view=aspnetcore-5.0 А ну да, я ж забыл. Кто ж доку читает, дока, знания "всякой хрени" это всё для лохов. Реальный пацан пишет код чисто на базовой пацанской интуиции ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 00:47 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Ты наверное путаешь с IoC. Нет, не путаю. Сам по себе принцип DI - разделение использования зависимости и создания её экземпляра ничего не говорит о том как эта зависимость должна создаваться. И ты сам же выше об этом написал: hVostt Зависимость внедряется? Внедряется :) hVostt А ну да, я ж забыл. Кто ж доку читает, дока, знания "всякой хрени" это всё для лохов. Реальный пацан пишет код чисто на базовой пацанской интуиции Все уже и так давно знают, что на всем форуме читать умеешь только ты. Как поп в сельской церкви. Так что можешь уже не утруждаться и не упоминать об этом в каждом сообщении. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 02:14 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Нет, не путаю. Сам по себе принцип DI - разделение использования зависимости и создания её экземпляра ничего не говорит о том как эта зависимость должна создаваться. И ты сам же выше об этом написал: hVostt Зависимость внедряется? Внедряется :) Принцип это IoC. DI -- один из вариантов реализации этого принципа. Сервис-локатор это другая реализация всё того же принципа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 13:14 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt DI -- один из вариантов реализации этого принципа. Скорее частный случай применения. Потому что IoC очень сильно намного шире, чем DI. Например, когда ты в очередной раз пишешь свой любимый button_Сlick, то ты, на самом деле, тоже используешь IoC. Если посмотреть на SOLID, то IoC это "O", а DI где-то ближе к "D". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 15:53 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Скорее частный случай применения. Потому что IoC очень сильно намного шире, чем DI. Например, когда ты в очередной раз пишешь свой любимый button_Сlick, то ты, на самом деле, тоже используешь IoC. Если посмотреть на SOLID, то IoC это "O", а DI где-то ближе к "D". Не понял, как связан обработчик события нажатия кнопки с IoC. Если смотреть на SOLID, то IoC имеет прямое отношение к D. Принцип открытости/закрытости (O) к IoC прямого отношения не имеет. Вообще рекомендую почитать книженцию Паттерны проектирования на платформе .NET Сергея Теплякова. Очень хорошо и понятным языком описано. При чём читается намного приятней, чем западный язык, где часто авторы грешат навязыванием собственного нафиг не нужного мнения. Есть и критика и практическое применение. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 01:03 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Не понял, как связан обработчик события нажатия кнопки с IoC. А ты скажи своей мобиле "Hey Google!" и спроси у неё, что означает аббревиатура IoC. wikiИнверсия управления (англ. Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения зацепления (связанности) в компьютерных программах. Также архитектурное решение интеграции, упрощающее расширение возможностей системы, при котором поток управления программы контролируется фреймворком. В обычной программе программист сам решает, в какой последовательности делать вызовы процедур. Но, если используется фреймворк, программист может разместить свой код в определенных точках выполнения (используя callback или другие механизмы), затем запустить «главную функцию» фреймворка, которая обеспечит все выполнение и вызовет код программиста тогда, когда это будет необходимо. Как следствие, происходит утеря контроля над выполнением кода — это и называется инверсией управления (фреймворк управляет кодом программиста, а не программист управляет фреймворком). hVostt Принцип открытости/закрытости (O) к IoC прямого отношения не имеет. Очень даже имеет, пускай даже и не прямое (я и не говорил что это прямо-таки одно и то же). Потому что при IoC мы расширяем/модифицируем поведение приложения не меняя ничего в существующем фреймворке (закрытость к изменениям), а дополняя его своими "расширениями" в виде коллбеков, обработчиков событий и, в том числе, инжекцией зависимостей, которые этот фрейморк будет вызывать (открытость к расширению). hVostt Вообще рекомендую почитать книженцию Паттерны проектирования на платформе .NET Сергея Теплякова. Ты разве забыл, что я читать не умею - в нашем кишлаке школы не было ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 02:45 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat hVostt Не понял, как связан обработчик события нажатия кнопки с IoC. А ты скажи своей мобиле "Hey Google!" и спроси у неё, что означает аббревиатура IoC. Ясень не ответил мне. Если пояснишь, буду благодарен. Если не пояснишь, будем считать это очередной игрой твоего воображения )) fkthat hVostt Принцип открытости/закрытости (O) к IoC прямого отношения не имеет. Очень даже имеет, пускай даже и не прямое (я и не говорил что это прямо-таки одно и то же). Потому что при IoC мы расширяем/модифицируем поведение приложения не меняя ничего в существующем фреймворке (закрытость к изменениям), а дополняя его своими "расширениями" в виде коллбеков, обработчиков событий и, в том числе, инжекцией зависимостей, которые этот фрейморк будет вызывать (открытость к расширению). IoC решает совершенно другую задачу. Инверсия управления потоком исполнения служит только для уменьшения связанности (coupling). Никакого отношения к принципу открытости/закрытости не имеет. Более того, агрессивнное снижение связанности может только навредить, при чём довольно сильно. Такое может наблюдаться при снижении связности (cohension). И при IoC мы никак модицифируем поведение, мы изменяем направление контроля, это всё что мы делаем. Ещё и колбеки какие-то у тебя появились... боже какая же у тебя адская каша в голове, просто уму не постижимо!! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 23:51 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Ясень не ответил мне. Если пояснишь, буду благодарен. Если не пояснишь, будем считать это очередной игрой твоего воображения )) Я же процитировал ниже. hVostt Инверсия управления потоком исполнения служит только для уменьшения связанности (coupling). Наводящий вопрос - а уменьшение связности это самоцель или все-таки тоже для чего-то служит? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 14:09 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt И при IoC мы никак модицифируем поведение, мы изменяем направление контроля, это всё что мы делаем. См. выше. Изменение направления контроля тоже только ради изменения направления контроля? Ты как те слепые из притчи, которые трогали слона за хер различные части тела. Где-то на что-то наткнулся, прочитал, запомнил, а общей картины у тебя так и нет. Потому что надо не только читать и запоминать, а еще и хоть немного пытаться это осмысливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 14:12 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Ещё и колбеки какие-то у тебя появились... wiki Inversion of control is used to increase modularity of the program and make it extensible , and has applications in object-oriented programming and other programming paradigms. The term was used by Michael Mattsson in a thesis, taken from there by Stefano Mazzocchi and popularized by him in 1999 in a defunct Apache Software Foundation project, Avalon, then further popularized in 2004 by Robert C. Martin and Martin Fowler. The term is related to, but different from, the dependency inversion principle, which concerns itself with decoupling dependencies between high-level and low-level layers through shared abstractions. The general concept is also related to event-driven programming in that it is often implemented using IoC so that the custom code is commonly only concerned with the handling of events , whereas the event loop and dispatch of events/messages is handled by the framework or the runtime environment. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 14:21 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat Наводящий вопрос - а уменьшение связности это самоцель или все-таки тоже для чего-то служит? Уменьшение связАнности. Связность как раз надо увеличивать:) Цель очень простая -- обособление связной логики, повышение шансов переиспользования (модульность, расширение функционала программы за этот счёт), упрощает (или даже вообще разрешает) юнит-тестирование. Плюс уменьшение связанности даёт возможность применять аспектное программирование. Нет, наводящий вопрос никак не наводит на мысль, что это как-то говорит про открытость/закрытость. fkthat См. выше. Изменение направления контроля тоже только ради изменения направления контроля? Ты как те слепые из притчи, которые трогали слона за хер различные части тела. Где-то на что-то наткнулся, прочитал, запомнил, а общей картины у тебя так и нет. Потому что надо не только читать и запоминать, а еще и хоть немного пытаться это осмысливать. Есть более общий и глобальный принцип: необходимо стремиться к уменьшению связАнности и увеличению связности. IoC позволяет решить задачу по уменьшению связАнности. fkthat wiki Inversion of control is used to increase modularity of the program and make it extensible , and has applications in object-oriented programming and other programming paradigms. The term was used by Michael Mattsson in a thesis, taken from there by Stefano Mazzocchi and popularized by him in 1999 in a defunct Apache Software Foundation project, Avalon, then further popularized in 2004 by Robert C. Martin and Martin Fowler. The term is related to, but different from, the dependency inversion principle, which concerns itself with decoupling dependencies between high-level and low-level layers through shared abstractions. The general concept is also related to event-driven programming in that it is often implemented using IoC so that the custom code is commonly only concerned with the handling of events , whereas the event loop and dispatch of events/messages is handled by the framework or the runtime environment. Ты путаешь расширяемость архитектуры приложения (модульность), с расширяемостью в архитектуре иерархии классов. IoC может использоваться для чего угодно, в том числе для получения обработчика события из контейнера. Но это задача конкретного компонента, откуда он будет обработчик брать, из IoC, или из собственного реестра -- значения не имеет. Никакого отношения к событиям IoC не имеет. Нет такой концепции, нет такого определения, в IoC событийная модель никак не участвует и не прослеживается. Её там нет. Посмотри на описание и диаграммы. Как я и говорю, смешались в кучу, люди, кони :) Выдернул цитату, увидел, что упомянули событийную модель при описании IoC, всё --- значит IoC это про события :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 14:36 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt Уменьшение связАнности. Я хз, потому что читаю практически только англоязычные источники. Loose coupling. hVostt IoC может использоваться для чего угодно, в том числе для получения обработчика события из контейнера. При чем тут контейнер вообще. Там даже ниже по процитированной ссылке: wikiInversion of control carries the strong connotation that the reusable code and the problem-specific code are developed independently even though they operate together in an application. Callbacks, schedulers, event loops, dependency injection, and the template method are examples of design patterns that follow the inversion of control principle , although the term is most commonly used in the context of object-oriented programming. Контейнер это как раз хер хобот слона, за который ты сейчас держишься hVostt значит IoC это про события Чушь. Где я такое говорил. Событийная модель - один из авторexamples of design patterns that follow the inversion of control principle ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:03 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
fkthat wikiInversion of control carries the strong connotation that the reusable code and the problem-specific code are developed independently even though they operate together in an application. Callbacks, schedulers, event loops, dependency injection, and the template method are examples of design patterns that follow the inversion of control principle , although the term is most commonly used in the context of object-oriented programming. fkthat Чушь. Где я такое говорил. Событийная модель - один из авторexamples of design patterns that follow the inversion of control principle Признаю. Имел в виду DIP, так как мы начали с SOLID-а... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 18:46 |
|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#18+
hVostt fkthat пропущено... Контейнер это как раз хер хобот слона, за который ты сейчас держишься fkthat Чушь. Где я такое говорил. Событийная модель - один из пропущено... Признаю. Имел в виду DIP, так как мы начали с SOLID-а... евентс и делегатес не очень-то к IOC. откуда такая картинка? ну или точно не в одном ряду с остальными ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 19:09 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1354569]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 170ms |
0 / 0 |