В проекте, который использует платформу DI, Вы никогда не должны использовать 'новый' оператор?

Я пытаюсь перенести голову вокруг Внедрения зависимости.

Одна из вещей, которыми я смущен, - должна ли всем Вашим объектным инстанцированием управлять платформа DI (Spring, Guice, и т.д.).

Или, в противном случае как Вы определяете, какие объекты инстанцирует платформа и какие объекты инстанцируют с new оператор?

7
задан Chuck 28 March 2010 в 16:31
поделиться

5 ответов

Нет, еще есть место для нового. Не все объекты должны находиться под контролем фабрики DI.

Вы можете легко определить классы, которые должны находиться под контролем фабрики DI, потому что они обычно включают интерфейсы и реализации.

Любой локальный объект в реализации имеет право вызывать новый. Объекты модели, созданные для удовлетворения конкретного варианта использования, должны быть созданы путем вызова new и передачи значений параметров для этого конкретного экземпляра.

11
ответ дан 6 December 2019 в 07:05
поделиться

Пока новость не мешает вам изолировать единицы поведения для тестирования все в порядке. Примерами могут быть создание коллекций или типов значений, используемых в реализации, но фактически не выполнение «объектной работы» как таковой.

Сосредоточьтесь на слове «зависимость» - полагается ли рассматриваемый объект каким-либо образом для того, чтобы содержащий объект выполнял свою единственную истинную цель существования? Если да, то его следует вводить извне.

1
ответ дан 6 December 2019 в 07:05
поделиться

Я нашел этот пост Мишко Хевери очень полезным в различении между тем, какие объекты следует вводить как зависимости, а какие создавать можно. Он различает классы «Newable» и «Injectable».

10
ответ дан 6 December 2019 в 07:05
поделиться

new не обязательно исключает фреймворки DI. В Spring, например, вы можете использовать магию загрузки классов, чтобы выполнить внедрение зависимостей для любого объекта, созданного new .

Таким образом, хотя новый и управляемый контейнером DI в java являются обычно взаимоисключающими, это не жесткое правило.

1
ответ дан 6 December 2019 в 07:05
поделиться

Я бы сказал, что более простые объекты без «реальных» зависимостей не должны вводиться. Это могут быть объекты данных или, конечно, исключения и тому подобное.

Фраза «исключает нового оператора» в основном просто дает хорошее руководство, где искать вещи, поддерживающие DI.

2
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: