tag:blogger.com,1999:blog-8596733192274108952.post867136744725821427..comments2024-03-12T06:00:18.305+02:00Comments on Programming stuff: DI vs. DIP vs. IoCSergey Teplyakovhttp://www.blogger.com/profile/14300835272589262297noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-8596733192274108952.post-46849232905882952382023-11-29T10:04:18.839+02:002023-11-29T10:04:18.839+02:00Конечно, подмена понятий. Фаулер напакостил в свое...Конечно, подмена понятий. Фаулер напакостил в свое время. Под IoC контейнером можете понимать фреймворк. Под DI контейнером просто контейнер - концентратор зависимостей<br />Если в вашей системе все компоненты имеют свои зависимости, то где-то в системе какой-то класс или фабрика должны знать, что внедрять во все эти компоненты. Вот что делает DI-контейнер.Дмитрийhttps://www.blogger.com/profile/14814981676014029215noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-84193428250196442172023-11-29T09:42:28.233+02:002023-11-29T09:42:28.233+02:00Да, историческая причина. Так придумал Фаулер. Хот...Да, историческая причина. Так придумал Фаулер. Хотя DI служит и для IoC и для DIP Фаулер заострял внимание только на IoC когда вводил этот термин. https://martinfowler.com/articles/injection.html#InversionOfControl<br /><br />Это добавляет путаницы, конечноДмитрийhttps://www.blogger.com/profile/14814981676014029215noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-55540746899345640042023-11-29T09:40:05.293+02:002023-11-29T09:40:05.293+02:00Я бы еще добавил:
IoC может быть реализован
а) без...Я бы еще добавил:<br />IoC может быть реализован<br />а) без дополнительных сущностей - через DI или Service Locator<br />б) с дополнительными сущностями через шаблон наблюдатель, через фреймворки, через события и реакцию на них<br /><br />DIP может быть реализован <br />а) без дополнительных сущностей через DI и других способов я не знаю<br />б) с дополнительными сущностями через шаблон фабричный метод и так далееДмитрийhttps://www.blogger.com/profile/14814981676014029215noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-54146497983810962252019-11-10T11:43:42.044+02:002019-11-10T11:43:42.044+02:00Следует учитывать, то IoC контейнер (фреймворк) и ...Следует учитывать, то IoC контейнер (фреймворк) и принцип IoC - это разные вещи. DI -это действительно одна из реализаций принципа IoC, так что тут Вики не ошибается. Есть, конечно, и другие его реализации; например, паттерн Observer. При этом внутри любых фреймворков, DI используется часто и широко, в этом Вы правы.yandhttps://www.blogger.com/profile/17144568428398708288noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-58068008595811827372018-07-11T03:41:23.504+03:002018-07-11T03:41:23.504+03:00Фрейм орков? Фрейм орков? Anonymoushttps://www.blogger.com/profile/13324869226580644141noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-19392249329808928682017-10-29T23:02:03.204+02:002017-10-29T23:02:03.204+02:00Как я понимаю, более простыми словами, DI относитс...Как я понимаю, более простыми словами, DI относится к композиции ваших классов, т.е. с помощью DI вы "комопозите" классы в коде. IoC это как runtime enviroment of your code, например, Spring Framework является IoCTarasov Alexhttps://www.blogger.com/profile/07947334490509622128noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-50464408394104287362017-08-21T16:14:02.053+03:002017-08-21T16:14:02.053+03:00Я тоже не могу вкурить, почему Dependency Injectio...Я тоже не могу вкурить, почему Dependency Injection считается реализацией Inversion of Control. Если этому просто историческая причина, почему даже в англоязычной Википедии, которая должна быть, по идее, актуальна и точна, не расставлено всё по своим местам? Напротив, сказано: "Dependency injection is a specific type of IoC using contextualized lookup." (и ссылка на Фаулера).<br /><br />Но ведь вернее было бы сказать, что Dependency Injection — это просто один из удобных (и правильных) способов предоставления внешних зависимостей тем частям кода, которые пишет пользователь фреймворка или системы, построенной по принципу Inversion of Control.<br /><br />Верно ли это? Или я что-то не понимаю?Yuri Plashenkovhttps://www.blogger.com/profile/02226153998208877150noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-79099552676191080532015-11-11T18:45:54.440+02:002015-11-11T18:45:54.440+02:00Интересно, что на английской вики понятие IOC Cont...Интересно, что на английской вики понятие IOC Container не упоминается.<br /><br />Причина, почему этот термин может использоваться, исключительно историческое.<br /><br />Более корректное название для всех Unity, Sprint-ов и прочих autofac-ов - это именно DI-контейнер, хотя в некоторых случаях, что-то типа castle-а могут применяться для реализации декоратора, что можно отнести и к полноценному IoC.<br /><br />Просто в начале нулевых, когда начался бум на это дело, IoC и DI были синонимами, что довольно прочно укоренилось в головах. Отсюда и путаница.<br /><br />Статья Фаулера, как и эта статья, это как раз попытка вернуть понятия под контроль, поскольку очень важно, чтобы разные люди вкладывали в одно и то же слово, одно и то же значение (ну или хотя бы приблизительно одно и то же).Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-25884376394071359862015-11-11T14:54:50.784+02:002015-11-11T14:54:50.784+02:00Я про русскую вики. Вот цитата:
"Одной из реа...Я про русскую вики. Вот цитата:<br />"Одной из реализаций IoC является внедрение зависимостей (англ. dependency injection)."<br />Но ведь это полный абсурд. Как внедрение зависимостей может быть реализацией инверсии управления, когда эта два несвязанных понятия.<br />Как я понял, под IoC контейнером понимается сам фреймворк.<br />Тогда в чем отличие IoC контейнера от DI контейнера?Anonymoushttps://www.blogger.com/profile/17684053968049056204noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-69115574467828960642015-11-11T14:52:43.583+02:002015-11-11T14:52:43.583+02:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/17684053968049056204noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-84464002835974230042015-11-11T05:03:43.175+02:002015-11-11T05:03:43.175+02:00Игорь, а о какой Вики идёт речь (rus/eng)? Я бегло...Игорь, а о какой Вики идёт речь (rus/eng)? Я бегло глянул IOC в англоязычной Вики и ереси там не увидел....Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-5338143520323751962015-11-11T02:09:23.276+02:002015-11-11T02:09:23.276+02:00Сергей, тогда возникает вопрос определения данных ...Сергей, тогда возникает вопрос определения данных терминов в вики. Если исходить из вашего материала по фаулеру, то в вики полный бред и подмена понятий.<br />Тогда возникает вопрос что такое IoC контейнер? И что такое DI контейнер и в чем их принципиальные различия?<br />ps в том же spring употребляют имеено понятие IoC контейнера, который служит для управления зависимостями. Хотя в определении инверсии управления нет ни слова о зависимостях...Anonymoushttps://www.blogger.com/profile/17684053968049056204noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-4388181726825888832015-11-11T01:57:30.635+02:002015-11-11T01:57:30.635+02:00Сергей, тогда возникает вопрос определения данных ...Сергей, тогда возникает вопрос определения данных терминов в вики. Если исходить из вашего материала по фаулеру, то в вики полный бред и подмена понятий.<br />Тогда возникает вопрос что такое IoC контейнер? И что такое DI контейнер и в чем их принципиальные различия?<br />ps в том же spring употребляют имеено понятие IoC контейнера, который служит для управления зависимостями. Хотя в определении инверсии управления нет ни слова о зависимостях...Anonymoushttps://www.blogger.com/profile/17684053968049056204noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-3666058583739666602015-07-18T20:22:08.931+03:002015-07-18T20:22:08.931+03:00Алекс, спасибо. Перезалил картинку.Алекс, спасибо. Перезалил картинку.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-82527093764786049852015-07-18T20:15:46.097+03:002015-07-18T20:15:46.097+03:00Сергей, первая картинка в статье не загружается.Сергей, первая картинка в статье не загружается.Tarasov Alexhttps://www.blogger.com/profile/07947334490509622128noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-42295888279614236562015-04-10T13:11:14.599+03:002015-04-10T13:11:14.599+03:00Спасибо за статью, теперь всё встало на свои места...Спасибо за статью, теперь всё встало на свои места в голове!Valentinhttps://www.blogger.com/profile/03859015207675844659noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-73337306728189534282014-12-08T07:41:16.125+02:002014-12-08T07:41:16.125+02:00Спасибо, Сергей. Вещи на полках сознания наконец-т...Спасибо, Сергей. Вещи на полках сознания наконец-то нашли свои места и перестали дрейфовать с полки на полку.Anonymoushttps://www.blogger.com/profile/17417474379979825320noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-4177645595305454862014-11-29T06:01:07.967+02:002014-11-29T06:01:07.967+02:00Зависимости должны быть на текущем или более высок...Зависимости должны быть на текущем или более высоком уровне абстракции.<br /><br />Зависимости низкого уровня вредны. Это как если класс Reporter-а будет принимать ISocket. Сокет - это абстракция очень низкого уровня. Поэтому репортер должен зависеть от чего-то более высокоуровневого, например, ICommunicationProxy или что-то такого, а не зависеть от низкоурвевых абстракций, типа сокетов.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-82215435761844816252014-11-29T05:59:30.194+02:002014-11-29T05:59:30.194+02:00Ну так даже лучше, значит можно проревьюить понятн...Ну так даже лучше, значит можно проревьюить понятность материала:)Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-79902429347789553402014-11-28T17:09:55.718+02:002014-11-28T17:09:55.718+02:00Ты быстрее написал пост, чем я прочитал твою ссылк...Ты быстрее написал пост, чем я прочитал твою ссылку на аглийскую статью. Но теперь всё стало на свои места. Спасибо! <br />PS: к своему стыду скажу, что я раньше не знал, что буква "I" расшифровывается по разному в DI и DIP.Oleksiy Davidichhttps://www.blogger.com/profile/06798005643408616225noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-28607137108514662912014-11-28T08:02:33.513+02:002014-11-28T08:02:33.513+02:00Ответил там же, продублирую здесь:
Я не проводил ...Ответил там же, продублирую здесь:<br /><br />Я не проводил параллель между IoC и фреймворком, а привел это в качестве одного из примеров. В статье явно говорится, что Наблюдатель является одним из примеров инверсии управления. Очевидно, что наблюдатель не имеет никакого отношения ни к фреймворкам/библиотекам.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-72887781971043209152014-11-28T07:01:22.332+02:002014-11-28T07:01:22.332+02:00Ответил здесь: http://sparethought.wordpress.com/2...Ответил здесь: http://sparethought.wordpress.com/2014/11/28/re-di-vs-dip-vs-ioc/Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-89449248618460286982014-11-27T23:33:47.711+02:002014-11-27T23:33:47.711+02:00Три серьезных темы изложил в 3 строки, класс!
>...Три серьезных темы изложил в 3 строки, класс!<br />> Зависимости класса должны располагаться на текущем или более высоком уровне абстракции<br />Скорее, более низком?Vitaliy Ulantikovhttps://www.blogger.com/profile/12772132035187506887noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-78216071578336291232014-11-27T22:38:43.304+02:002014-11-27T22:38:43.304+02:00Там по ссылкам есть и англоязычные варианты. В них...Там по ссылкам есть и англоязычные варианты. В них букв поболее будет, но идея там такая же.<br /><br />Погодь, а эти MSR Orleans - они же в МС-е? А ты мне пришли свои комменты, а я этим товарищам в личку постучу их их вежливо передам!Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-91584840731332907042014-11-27T22:30:48.731+02:002014-11-27T22:30:48.731+02:00Серж, хороший пост. Корректный )))
Вот бы на англи...Серж, хороший пост. Корректный )))<br />Вот бы на английском - отослал бы ребятам пилящим MSR Orleans.<br />У них с этим реальные проблемы. Собственно как и у практически всех академиков. Инжинииринг - это не к ним ))))Anonymoushttps://www.blogger.com/profile/08780957389047237536noreply@blogger.com