2016-02-17 2 views
0

У нас есть система, которая имеет много модельных объектов (например, Car, Pedestrian, Road ...)Singleton Vs Singleton Завод

В настоящее время все они (менеджеры CarManager, PedestrianManager, RoadManager), которые возвращают singleton соответствующего класса.

Альтернатива предложила, чтобы иметь ManagerFactory синглтон, который может возвращать экземпляры CarManager, PedestrianManager, RoadManager. (например, ManagerFactory.getInstance().getCarManager())

Мы также пишем тест для проекта, и проблема заключалась в том, что, если мы будем использовать Injection Dependency, нам понадобится фактический экземпляр объекта для управления инъекциями.

Эта альтернатива хорошая? Вы изменили бы синглтон во что-то еще в этом случае?

+0

Это мнение, но я бы выбрал любой вариант, который дает вам наименьшее количество связей/кросс-зависимостей между различными частями вашего кода. А также все, что требует от вас распространения знаний о том, как ваш код работает через вашу кодовую базу, если это имеет смысл. – nielsbot

+0

Мой инстинкт, однако, не имеет «ManagerFactory» - я думаю, что это менее сложно. – nielsbot

ответ

0

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

Инъекционная инъекция означает, что вы публично заявляете, что, например, для работы A ему нужен экземпляр B (или экземпляр, который соответствует протоколу C, является лучшей ситуацией зависимости). Это требует, чтобы вы где-то создавали экземпляр B и передавали его A. A.

С точки зрения тестовой точки зрения инъекция зависимостей намного выше, потому что вы обычно хотите создать макетную версию B и использовать ее для тестирования A. Тест вводит экземпляр для использования. Тестирование синглетов - это боль ...

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

+0

Итак, в общем, вы говорите, что оба подхода - одно и то же, но второе лучше, поскольку оно позволяет инъекции зависимостей? – Ravul

+0

Singletons не предотвращают инъекцию зависимости как таковой, но если вы используете инъекцию зависимостей, вы обычно не используете синглтон. Для фабрики используйте его, если он добавляет некоторое значение, если он буквально просто вызывает alloc + init, тогда он не добавляет значения, если он имеет некоторую логику строителя, тогда он может добавить значение. – Wain

Смежные вопросы