Sobes.tech
Junior — Middle

Pode explicar o princípio de funcionamento do padrão Service Locator e sua aplicação na arquitetura de aplicações?

sobes.tech IA

Resposta da IA

O padrão Service Locator é utilizado para gerir dependências numa aplicação. A sua essência reside em que há um objeto centralizado — o localizador de serviços, que sabe como criar e fornecer os serviços necessários (objetos responsáveis por funções específicas).

Aplicação:

  • Em vez de cada classe criar ou receber dependências diretamente, ela recorre ao Service Locator.
  • Isto simplifica a substituição de implementações de serviços (por exemplo, para testes).
  • Ajuda a evitar uma forte dependência entre componentes.

Exemplo em Swift:

protocol AnalyticsService {
    func track(event: String)
}

class ServiceLocator {
    static let shared = ServiceLocator()
    private var services = [String: Any]()

    func addService<T>(_ service: T) {
        let key = String(describing: T.self)
        services[key] = service
    }

    func getService<T>() -> T? {
        let key = String(describing: T.self)
        return services[key] as? T
    }
}

// Uso:
let analytics = MyAnalyticsService()
ServiceLocator.shared.addService(analytics)

if let analyticsService: AnalyticsService = ServiceLocator.shared.getService() {
    analyticsService.track(event: "AppStarted")
}

Contras: pode complicar o rastreio de dependências e testes se usado sem precaução.