Недавно я слышал, что использование инъекций зависимостей является «единственным социально приемлемым способом использования синглтона в современном мире разработки программного обеспечения».Я не хочу прямо сейчас обсуждать точность этого утверждения, поскольку оно в основном основано на мнении.Моя цель сейчас - понять, как точно, как я могу использовать внедрение зависимостей с одноэлементным шаблоном.
Например, в моем последнем приложении для iOS у меня есть слой Service, где я храню свой URLSession код.Я создал этот слой как синглтон:
struct ServiceSingleton {
private init()
static let shared = ServiceSingleton()
func fetchJSON() {
// URLSession code
}
}
Затем я использую shared
в моем ViewController , как показано ниже:
class ViewController: UIViewController() {
override viewDidLoad() {
super.viewDidLoad()
fetchData()
}
fileprivate func fetchData() {
ServiceSingleton.shared.fetchJSON()
}
}
Конечно, кодВыше используется синглтон, но он не использует внедрение зависимостей.Я знаю, что если бы я хотел использовать внедрение зависимостей вообще, я бы добавил что-то вроде этого к ViewController :
// Dependency Injection Constructor
override init(someProperty: SomePropertyType) {
self.someProperty = someProperty
super.init()
}
TL; DR:
(1) Не могли бы вы показать мне, как правильно использовать внедрение зависимостей с одноэлементным шаблоном в Swift?
(2) Не могли бы вы объяснить мне, чего это дает?
(3) Должен ли я всегда использовать DI, если теперь я использую шаблон синглтона в своих проектах iOS?