powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
25 сообщений из 248, страница 2 из 10
Какие приемущества использования IoC контейнера?
    #37564289
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomТо есть с момента публикации статьи понятия Inversion of Control, Dependency Injection и Service Locator как-то принципиально изменились?

При чем здесь вообще это? Я твои скажем прямо, не совсем авторитетные статьи прочитал, а вот ты даже не удосужился взглянуть на мою ссылку, ибо если бы удосужился, может бы наконец осознал, что ты говоришь глупость, точнее не глупость, а не совсем правду.

Сначала пара логических утверждений:
DI это IoC = true
Если мы говорим про DI, следовательно мы говорим про IoC = true
Это ты сам себя в чем то убедил видимо, ну да ладно:)

А теперь по поводу вашей фразы, выделенной жирным - к сожалению, она бессмысленна. Поясните вот эти моменты:
1) Что такое "обычный ход выполнения программы"? Значит есть "необычный"? Как их отличить друг от друга и в чем заключаются их характерные черты?
2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Еще раз, максимально сжато: IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту. Я не знаю, как это можно еще проще объяснить

Ок, я программист а не писатель и иногда свои мысли доношу не совсем правильно, но постараюсь обьяснить на пальцах. Сам термин Inversion of Control - неужели не наводит тебя на мысль, что IoC - это способ снижения связанности классов путем делегирования процесса установления зависимсотей между объектами от самих объектов к некому стороннему компоненту - ну скажем так слишком упрощенное определение? Если бы IoC включал только это , то его было бы логичнее назвать Inversion of Instantiation или еще как-либо в этом духе.

Итак, что же такое "обычный ход выполнения программы" - это неудачный перевод термина flow of control of programm. Под этим термином подразумевается процедурный ход выполнения программы, для примера(который кстати у Фаулера),
Код: ruby
1.
2.
3.
4.
5.
6.
puts 'What is your name?'
  name = gets
  process_name(name)
  puts 'What is your quest?'
  quest = gets
  process_quest(quest)



В этом случае твой код всегда находится под твоим контролем, ты решаешь когда задать вопрос, как на него отреагировать, когда завершить программу. Inversion of control происходит когда ты пробуешь перенести свою программу на оконный интерфейс, ты создаешь методы по обработке ввода пользователя, создаешь контролы и биндишь методы на события, тебя больше ничего не волнует. Ты "отдаешься на откуп" оконной системе, именно она будет гонять вечный цикл в ожидании ввода пользователя, диспетчиризации событий и т.п., твой же код будет вызван только тогда когда это будет необходимо, и будет делать только то, что ты указал - таким образом flow of control переходит от тебя к оконной системе(в данном контексте ее можно назвать фреймворком). Все это называется так называемым Принципом Голливуда - не звони нам, мы сами тебе позвоним. Таким образом контроль выполнения инвертирован - не ты вызываешь оконную систему, а она вызывает твои методы, когда нужно, всю работу с инфраструктурой оконная система берет на себя. IoC - это главное отличие библиотек от фреймворков(хотя термин фреймворк тоже достаточно расплывчат), библиотека функций - это набор классов и методов, которые ты непосредственно вызываешь, они делают полезные вещи, а потом возвращают контроль тебе. В отличие от них фреймворки обладают некоторой дополнительной функциональностью и имеют некий абстрактный дизайн, его ты можешь только сконфигурировать, и обьяснить когда и в какие моменты времени фреймворк должен вызвать твой код, это и есть IoC.
Великолепным примером IoC являются EJB2, когда ты создаешь сессионный EJB бин, то ты определяешь методы ejbPassivate() и т.д.. но ты не вызываешь их напрямую, они будут вызваны тогда, когда нужно, тебе не нужно заботиться об этом - опять тот же Принцип Голливуда. Классическим примером IoC кстати является паттерн Template Method, как ни странно.

Не волнуйся, ты не первый кто неправильно трактует этот термин, он очень размыт, но первоначальное его определение было именно таким.

Что касается - автор2) Что значит "отдается на откуп фреймворкам"? Вот я попросил Spring заинжектить мне бин? Это "откуп"? А вот я попросил Хибер вытащить мне инфу из БД. Это "откуп"?

Таким образом, когда Spring инжектит бин - это IoC, когда хибер достает данные из базы - это скорее вызов библиотеки, хотя граница тут очень размыта.

Более того, ServiceLocator исходя из этого, вовсе никакое не IoC, а вот Dependency Injection - да. В общем DI - это всего лишь подмножество IoC, о чем я тебе и пытаюсь обьяснить.

Таким образом декларативные транзакции и управлением скоупами жизни бина - это как раз и есть IoC.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564291
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у тебя компонент, который должен взаимодействовать с другими. Как ему их найти? Компоненту приходилось самому их искать "контейнер дай мне". Но для того чтобы это сделать у компонента должна быть ссылка на контейнер, а это лишняя зависимость.

Появились IoC Container-ы, которые "по тихому" делают инекцию в компонент нужных ресурсов. И ты "магическим образом" получаешь полностью готовый компонент.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564312
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видеотуториал по Спрингу (и ИоК в частности): http://www.youtube.com/user/ytkach#p/c/B0276A0A62BDEF06
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37564422
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник ,
По поводу вышей поправки, что IoC это более широкое понятие - согласен. И Template туда пролезет, по сути любой колбак есть IoC.

забыл никБолее того, ServiceLocator исходя из этого, вовсе никакое не IoC, а вот Dependency Injection - да.
http://en.wikipedia.org/wiki/Inversion_of_control - поиск по словам Service Locator
http://msdn.microsoft.com/en-us/library/ff648478.aspx - поиск по словам Service Locator
http://martinfowler.com/articles/injection.html#UsingAServiceLocator

забыл никВ общем DI - это всего лишь подмножество IoC, о чем я тебе и пытаюсь обьяснить.Так я же уже раза 3 об этом сказал

забыл никТаким образом декларативные транзакции и управлением скоупами жизни бина - это как раз и есть IoC.Ваша правда.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565090
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в java пока почти полный ноль, но попробую ответить на вопрос ТС "Какие приемущества использования IoC контейнера? "
так как я это понял для себя, в первом приближении.

У нас есть интерфейс:
Код: java
1.
2.
3.
public interface ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ();
}



И есть несколько классов реализующих его:
Код: java
1.
2.
3.
4.
5.
public class АВИАКОМПАНИЯ implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки самолетом
    }  
}


Код: java
1.
2.
3.
4.
5.
public class ПАРОХОДСТВО implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки пороходом
    }  
}


Код: java
1.
2.
3.
4.
5.
public class АВТОПРЕДПРИЯТИЕ implements ПЕРЕВОЗЧИК {
    public void ДОСТАВИТЬ() {
        //реализация доставки автомобилем
    }  
}



А это наш "главный" класс который выполняет "полезную" работу.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class ТРАНСАГЕНСТВО {

    private ПЕРЕВОЗЧИК bailee;

    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }
}


Так вот ему совершенно похер, каким конкретно перевозчиком будет отправлен груз, он знать о нем ничего не знает кроме того что он может его доставить. И вот тут IoC контейнер по сути делает всю работу за нас, включая создание конкретного экземпляра перевозчика, мы просто указываем в конфигурационном файле какого перевозчика сейчас использовать. А если нам захотелось изменить перевозчика то достаточно внести изменения в конфигурационный файл и не надо компилировать приложение.
Как то так. :)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565164
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel KurakinТак вот ему совершенно похер, каким конкретно перевозчиком будет отправлен груз, он знать о нем ничего не знает кроме того что он может его доставить. И вот тут IoC контейнер по сути делает всю работу за нас, включая создание конкретного экземпляра перевозчика, мы просто указываем в конфигурационном файле какого перевозчика сейчас использовать. А если нам захотелось изменить перевозчика то достаточно внести изменения в конфигурационный файл и не надо компилировать приложение.
Как то так. :)

Это вы сейчас сказали часть от паттерна Factory, часть от полиморфизма, и часть от Hot Swap. Как-то так:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565207
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiR@chЭто вы сейчас сказали часть от паттерна Factory, часть от полиморфизма, и часть от Hot Swap. Как-то так:)Я бы сказал - это паттерн Visitor в чистом виде.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565220
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дела.
Тут нет паттерна Factory - где метод newInstance()?
Тут нет паттерна Visitor - где классического вызова visitor.visit(this)?.
Тут нет никакого Hot Swap. Что это вообще такое? Если меняется xml с определением бинов, то да, проект не надо перекомпилировать, но его все равно надо пересобирать и передеплоивать.
Тут есть только полиморфизм.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565226
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svenom,

Есть такое понятие, называется "ирония":) Вообще, тяжело жить без чувства юмора, да.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565230
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visitorом тут не пахнет. Как и Hot swap.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565235
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто позвал зануд?
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565236
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Factory кстати есть - только это скрыто от наших глаз:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565242
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты не видел мы занудим тут уже не первый день:)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565252
kiR@ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Видел, видел:)
Всё это мне напоминает уроки литературы в школе. "А что хотел сказать автор своим произведением?"
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565257
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никFactory кстати есть - только это скрыто от наших глаз:) Неправда. Не все Сreational Pattern'ы это фабрика. Контейнер спринга нельзя подогнать под конкретный паттерн. В нем присутствует функционал:
Синглтона - http://en.wikipedia.org/wiki/Singleton_pattern
Прототипа - http://en.wikipedia.org/wiki/Prototype_pattern
Ожбэкт пула - http://en.wikipedia.org/wiki/Object_pool_pattern
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565258
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот фабрики в нем как раз таки нет вообще.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565279
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom, чтобы стать синглтоном - объект то должен кто-то создать? То же самое с пулом. Прототип тоже не подходит в этом случае. А вот newInstance() и привидение к интерфейсу, где-то внутри спринга как раз есть) Хотя этот спор бессмысленен, потому что он бестолковый)
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565283
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomТут нет паттерна Visitor - где классического вызова visitor.visit(this)?.

visit(this) вот:
Код: java
1.
2.
3.
4.
5.
6.
    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }



Вызова visitor.visit(this), действительно, нет. Эта функция возложена на клиентский класс. .
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565287
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это всего лишь делегирование
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565290
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugenevisit(this) вот:
Код: java
1.
2.
3.
4.
5.
6.
    public void setBailee(ПЕРЕВОЗЧИК bailee) {
        this.bailee = bailee;

    public void ОТПРАВИТЬ_ГРУЗ {
        bailee.ДОСТАВИТЬ();
    }



то есть в параметре не this конечно. Но очень близко к идее Visitor.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565305
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никsvenom, чтобы стать синглтоном - объект то должен кто-то создать?Верно, но я повторю вам - creational pattern'ов много:
Builder
Factory Method
Abstract Factory
Singleton
Multiton
Object Pool
и т.д.
Они все создают объекты. Но это же не значит, что они все фабрики?

забыл никТо же самое с пулом.Вы знаете в чем object pool заключается? Инстацировать объекты, положить их куда-то, а потом выдавать пользователю. Это именно то, что делает спринг при развертывании контекста. Все синглтоны инстанцируются и прикрепляются к контексту.

забыл никПрототип тоже не подходит в этом случае.
Прототип относится только к тем бинам, у которых указано scrope="prototype". Они инстанцируются заново при каждом вызове context.getBean(). Прототипом в этом случае выступает xml-описание бина: какие объекты куда подставить.

забыл никА вот newInstance() и привидение к интерфейсу, где-то внутри спринга как раз есть)В классическом Factory Method newInstance() не имеет параметров, всегда выдает новый объект, и выдает инстанс объекта строго определенного типа.
Наверняка в спринге есть что-то типа newInstance(Class class), но только это не делает его фабрикой в классическом понимании.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565314
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugeneВызова visitor.visit(this), действительно, нет. Эта функция возложена на клиентский класс. . Это вы уже сами придумали.
XEugeneто есть в параметре не this конечно. Но очень близко к идее Visitor. Вообще ни разу не близко. В паттерне Visitor именно visit(this) и является ключевой его частью. А тут идет просто вызов какого-то метода какого-то объекта без параметров. А следовательно объект, чей метод вызывают не может быть визитором по определению, так как он не знает, кого "визитить"
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565318
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто говорил про классическую фабрику? Ты опять что-то придумал. Я ж не спорю что ты знаешь много creational patternов, я их тоже знаю - и когда и зачем использовать. Если быть точным, то спринг использует что-то вроде фабрики в сочетании с object pool, но опять же спор ни о чем.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565379
XEugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomВообще ни разу не близко. В паттерне Visitor именно visit(this) и является ключевой его частью. А тут идет просто вызов какого-то метода какого-то объекта без параметров. А следовательно объект, чей метод вызывают не может быть визитором по определению, так как он не знает, кого "визитить" Он "визитит" конкретную реализацию интерфейса ПЕРЕВОЗЧИК, которую клиентский код передал в setBailee и вызывает у него метод ДОСТАВИТЬ(). Заявление, что это "Visitor в чистом виде", было немного провокационным с моей стороны, но это тот случай, когда используют Visitor.
...
Рейтинг: 0 / 0
Какие приемущества использования IoC контейнера?
    #37565384
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XEugene, Да успокойтесь вы уже со своими "провокациями" Это просто один объект вызывает метод другого.
...
Рейтинг: 0 / 0
25 сообщений из 248, страница 2 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / Какие приемущества использования IoC контейнера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]