Sobes.tech
Junior — Middle

Elmagyarázná a Service Locator mintázat működési elvét és alkalmazását az alkalmazásarchitektúrában?

sobes.tech MI

Válasz az MI-től

A Service Locator minta az alkalmazásban lévő függőségek kezelésére szolgál. Lényege, hogy van egy központosított objektum — a szolgáltatáskereső, amely tudja, hogyan kell létrehozni és biztosítani a szükséges szolgáltatásokat (azokat a objektumokat, amelyek bizonyos funkciókért felelősek).

Alkalmazás:

  • Minden osztály helyett, amely közvetlenül hozna létre vagy kapna függőségeket, a Service Locatorhoz fordul.
  • Ez megkönnyíti a szolgáltatások implementációinak cseréjét (például teszteléshez).
  • Segít elkerülni az erős összekapcsolódást a komponensek között.

Swift példában:

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
    }
}

// Használat:
let analytics = MyAnalyticsService()
ServiceLocator.shared.addService(analytics)

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

Hátrányok: óvatlan használat esetén megnehezítheti a függőségek nyomon követését és a tesztelést.