How Does Inversion of Control Really Work?

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

IoC кажется стал угловым камнем многих фреймворков и объектно-ориентированных дизайнов, с тех пор как его описали Мартин Фаулер, Роберт Мартин и другие десять лет назад. Несмотря на его популярность, IoC часто неправильно понимается и излишне усложняется.

print(book.title());

Это очень просто: мы получаем заголовок из книги и просто передаем его процедуре print(), или чему-то другому. Мы контролируем, у нас в руках все решение.

В отличие от этого, вот инверсия:

Мы передаем всю книгу процедуре print(), и она вызывает title() по своему усмотрению. То есть мы делегируем управление.

Это практически все, что вам нужно знать об IoC.

Есть ли у этого что-то общее с контейнерами внедрения зависимостей? Конечно, мы могли бы поместить книгу в контейнер, внедрить весь контейнер в print(), позволить ему извлечь книгу из контейнера и затем вызвать title(). Но это не то, о чем на самом деле говорит IoC - это всего лишь один из его искаженных сценариев использования.

Основная идея IoC точно такая же, какую я предлагал в своих предыдущих сообщениях о голых данных и дружественных объектах: мы не должны иметь дело с данными, а только с композицией объектов. В данном примере дизайн был бы еще лучше, если бы мы полностью избавились от процедуры print() и заменили ее объектом:

Это было бы чистое составление объектов.

Больше нет ничего сказать на эту тему; я надеюсь, что я прояснил это для вас — все так просто.

Translated by ChatGPT gpt-3.5-turbo/42 on 2024-01-09 at 18:09

sixnines availability badge   GitHub stars