|
Инжектить зависимость только в базовом классе, а использовать во всех потомках
|
|||
---|---|---|---|
#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?fid=18&msg=40047577&tid=1354569]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 150ms |
0 / 0 |