Подтвердить что ты не робот

Когда использовать контейнер МОК?

Я пытаюсь понять, когда я должен использовать контейнер или вручную впрыскивать зависимости. Если у меня есть приложение, которое использует 1-2 интерфейса и имеет только 1-2 конкретных реализации для каждого интерфейса, я бы склонялся к тому, чтобы справиться с этим сам.

Если у меня есть небольшое приложение, которое использует 2-3 интерфейса, и каждый интерфейс имеет 2-3 конкретных реализации, должен ли я использовать полноразмерный контейнер? Было бы достаточно чего-то простого, например этого?

В основном я пытаюсь понять, когда это необходимо для ручного управления этими зависимостями, когда (или если) я должен использовать что-то простое, как указано выше, и когда использовать контейнер IOC, такой как Ninject, Windsor и т.д. Возможно, было бы нецелесообразно помещать число на что-то подобное, но как я могу сказать ему время использовать контейнер IOC?

4b9b3361

Ответ 1

Важно понять, что вы можете (и должны) написать свой код в дружественном для пользователя, но контейнеро-агностическом способе.

Это означает, что вы всегда должны подталкивать состав зависимостей к точке, где вы больше не можете ее откладывать. Это называется Root Composition и часто помещается рядом с точкой входа приложения.

Если вы создаете свое приложение таким образом, ваш выбор контейнера DI (или нет контейнера DI) вращается вокруг одного места в вашем приложении, и вы можете быстро изменить стратегию.

Вы можете использовать Бедный человек DI, если у вас есть только несколько зависимостей, или вы можете использовать полномасштабный Контейнер DI. Используемый таким образом, вы не будете зависеть от какого-либо конкретного контейнера DI, поэтому выбор становится менее важным с точки зрения ремонтопригодности.

Контейнер DI помогает вам управлять полнотой, включая время жизни объекта. Используемый, как описано здесь, он не делает ничего, что вы не могли бы написать в руке, но он делает это лучше и более лаконично. Таким образом, мой порог для того, чтобы начать использовать контейнер DI, будет довольно низким.

Я бы начал использовать контейнер DI после того, как пройду несколько зависимостей. Большинство из них довольно легко начать в любом случае.


Update: My ноябрь 2012 года ответит на этот вопрос.