Przygotowanie do rozmowy kwalifikacyjnej na iOS 6 — wstrzykiwanie zależności

May 04 2023
Rozmowa kwalifikacyjna Pytania Odwrócenie kontroli to wzorzec projektowy oprogramowania, który koncentruje się na przekazaniu kontroli od programisty do struktury. Framework jest wtedy odpowiedzialny za tworzenie i zarządzanie instancjami obiektów, podczas gdy programista jest odpowiedzialny za dostarczanie specyficznych konfiguracji aplikacji.

Pytania do wywiadu

  1. Co to jest wstrzykiwanie zależności i dlaczego jest przydatne?
  2. Czy możesz podać przykład, w jaki sposób wstrzykiwanie zależności jest używane w systemie iOS?
  3. Jakie są różne typy wstrzykiwania zależności (wstrzykiwanie konstruktora, wstrzykiwanie ustawiacza itp.) I kiedy należy stosować każdy typ?
  4. W jaki sposób można wykorzystać wstrzykiwanie zależności, aby poprawić testowalność aplikacji na iOS?
  5. Czy możesz omówić niektóre typowe wyzwania lub pułapki, które pojawiają się podczas korzystania z wstrzykiwania zależności w programowaniu na iOS i jak ich uniknąć?
  6. Jakie są popularne frameworki wstrzykiwania zależności dla systemu iOS i jakie są ich kluczowe cechy i zalety?
  7. Czy możesz omówić kilka najlepszych praktyk dotyczących wstrzykiwania zależności w programowaniu na iOS?

Odwrócenie kontroli to wzorzec projektowy oprogramowania, który koncentruje się na przekazaniu kontroli od programisty do struktury. Framework jest wtedy odpowiedzialny za tworzenie i zarządzanie instancjami obiektów, podczas gdy programista jest odpowiedzialny za dostarczanie specyficznych konfiguracji aplikacji.

Jest to wzorzec, który pozwala odwrócić przepływ kontroli. Aby to osiągnąć, przenosisz wszystkie obowiązki klasy, z wyjątkiem jej głównej, na zewnątrz, czyniąc je jej zależnościami. Dlatego twój obiekt nie wie, jak je utworzyć. Dzięki temu kod jest testowalny i możliwy do utrzymania dzięki wyeliminowaniu ścisłych relacji między klasami.

Zastrzyk zależności

Dependency Injection to jeden z nielicznych wzorców, który pozwala zastosować zasady Inversion of Control. DI można zaimplementować na kilka sposobów

wtrysk konstruktora

W Constructor Injection przekazujemy wszystkie zależności przez konstruktor jako parametry.

protocol EngineProtocol {
  func start()
  func stop()
}

protocol TransmissionProtocol {
  func changeGear(gear: Gear)
}

final class Car {
  private let engine: EngineProtocol
  private let transmission: TransmissionProtocol

  init(engine: EngineProtocol, transmission: TransmissionProtocol) {
    self.engine = engine
    self.transmission = transmission
  }
}

final class Car {
  private var engine: EngineProtocol?
  private var transmission: TransmissionProtocol?

  func setEngine(engine: EngineProtocol) {
    self.engine = engine
  }

  func setTransmission(transmission: TransmissionProtocol) {
    self.transmission = transmission
  }
}

Główną ideą jest to, że fragment kodu, który wymaga pewnych zależności, nie stworzy ich dla siebie, a kontrola nad dostarczaniem tych zależności jest odroczona do jakiejś wyższej abstrakcji.

Główną zaletą Inversion of Control jest to

  • DI pomaga poprawić modułowość kodu, łatwiej go zrozumieć i utrzymać
  • Łatwe wstrzykiwanie próbnych lub fałszywych zależności podczas testowania
  • Elastyczność i rozszerzalność Twojej aplikacji, umożliwiając łatwe zastępowanie lub zamianę zależności używanych przez Twoje komponenty.