Это, вероятно, фундаментальный вопрос для опытного разработчика iOS, но, исходя из опыта Java, где у нас есть много вкусностей Dependency Injection (DI) (например, Spring), у меня возникли проблемы с выяснением, кто должен владеть DI объекты. К сожалению, я обнаруживаю, что создаю кучу синглетонов, которыми становится довольно неприятно управлять.
Например, у нас есть некоторые Configuration
, к которым другие классы хотели бы получить доступ. В настоящее время у нас есть только одно экземпляра для конфигурации, что делает тестирование немного сложным. Технически мы решаем эту проблему, используя метод Swizzling в OCMock.
В Java / Spring есть некоторый контейнер, который создает / владеет этими объектами. В iOS я думаю, что самые близкие вещи, которые у меня есть к контейнеру, это UIApplication и UIApplicationDelegate. Имеет ли смысл для этих вещей создавать / владеть этими объектами, которые в конечном итоге будут внедрены в другие объекты?
Если это так, какова подходящая стратегия для доступа к этим объектам? Например, создайте категорию на UIApplication или UIApplicationDelegate для доступа к этим объектам, например:
[[UIApplication sharedApplication] configuration]
или [[[UIApplication sharedApplication] delegate] configuration]