[Перевод] Dependency Injection в Objective-C с Магией и Кровью
Разделения на MVC недостаточно С каждым днем iOS приложения становятся все более громоздкими, в следствие чего одного MVC становится мало. Мы видим все больше и больше классов различного назначения: логика выносится в сервисы, модели оборачиваются декораторами, крупные представления разбиваются на более мелкие части. И самое главное, что в этом случае у нас появляется масса зависимостей, и мы должны ими как-то управлять. Очень часто для решения проблемы зависимостей используется Singleton, по сути глобальная переменная, к которой все имеют доступ. Как часто вам приходилось видеть подобный код?[[RequestManager sharedInstance] loadResourcesAtPath:@«http://example.com/resources» withDelegate: self]; // или [[DatabaseManager sharedManager] saveResource: resource]; Этот подход используется во множестве проектов, но он имеет некоторые недостатки: тяжело застабать синглтон который используется внутри тестируемого класса синглтон, по сути, глобальная переменная с точки зрения SRP объект не должен контролировать свое Singleton’овское поведение Первую проблему решить довольно просто — нужно использовать свойства:@interface ViewController: UIViewController
@property (nonatomic, strong) RequestManager *requestManager;
@end Но этот подход имеет другие минусы — теперь кто-то должен «заполнить» это свойство. Магия Крови способствует решению этой проблемы.О том как стать адептом