Аноним 106 wrote:
> В общем, никак не могу придумать, в каких случаях может возникнуть необходимость в таких мощных средствах.
> Или я что-то неправильно понял?
IoC — по сути это весьма элементарно и очень просто
Для использования IoC нет никакой крайней необходимости в фреймворках
(хотя с ними конечно удобнее). Вы можете программировать для
микроконтроллеров в реальном времени и использовать IoC в своих классах
(если используете C++). Можете выделить специальный класс, назвать его
контекстом и в нем программным путем связывать классы между собой.
AbstractDisplay display = new LCDDisplay();
display.setWidth(100);
display.setHeight(60);
AbstractRing ring = new MelodicRing();
ring.setPower(0.7);
AbstractController controller = new RuleController();
controller.setRing(ring);
controller.setDisplay(display);
И это уже IoC — котроллер не сам ищет зависимости, а мы принудительно
устанавливаем их ему. Единственное, что следует учесть — то, что
правильный IoC основан на Interface Driven Design: сначала мы определяем
что делает система — контракт (интерфейсы для java, абстрактные классы
для C++), а затем мы программируем реализации — то есть пишем КАК это
будет исполнятся (классы). Причем в порыве творчества или по
необходимости мы можем сделать несколько реализаций на один и тот же
контракт. А главное из всего этого, что компоненты системы знают только
о контрактах друг, друга — а конкретные реализации подсовываются уже
снаружи. Это как раз и уменьшает сцепление между компонентами.
> Не могли бы вы привести примеры проектов, в которых это используется?
Spring Framework, Tapestry, EJB, JSF — куча Java-технологий
Posted via RSDN NNTP Server 2.1 beta