0Pricing
TypeScript Academy · Lekcja

Podstawy odwrócenia sterowania

Zrozum, dlaczego i kiedy odwracać zależności

Podstawy odwrócenia sterowania to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Zależności tworzone na sztywno

Gdy klasa tworzy własnych współpracowników za pomocą new, jest ściśle powiązana z ich konkretnymi typami. Utrudnia to rekonfigurowanie klasy i jej testowanie.

Przykład ścisłego powiązania

W tym przykładzie usługa tworzy własny rejestrator. Nie ma możliwości podstawienia innego rejestratora bez edytowania klasy.

class ConsoleLogger { log(m: string) { console.log(m); } }
class OrderService {
  private logger = new ConsoleLogger(); // hard-coded
  place() { this.logger.log("order placed"); }
}
new OrderService().place();

Czym jest odwrócenie sterowania

Odwrócenie sterowania (IoC) zmienia sposób podejmowania decyzji o zależnościach. Zamiast tworzyć je w klasie, dostarcza je coś z zewnątrz. Klasa deklaruje swoje potrzeby i je otrzymuje.

Wstrzykiwanie zależności

Wstrzykiwanie zależności (DI) to powszechny sposób realizacji IoC: współpracownicy są przekazywani z zewnątrz, zamiast być konstruowani wewnątrz klasy. Osoba wywołująca kontroluje, która implementacja zostanie użyta.

Wersja ze wstrzykiwaniem

Teraz rejestrator jest dostarczany z zewnątrz. Usługa nie wie już, jaki konkretny rejestrator otrzymała, i nie musi się tym przejmować.

class OrderService {
  constructor(private logger: { log(m: string): void }) {}
  place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();

Dlaczego IoC ułatwia testowanie

Ponieważ zależności pochodzą z zewnątrz, testy mogą przekazywać atrapy lub obiekty typu spy. Można weryfikować działanie bez rzeczywistych operacji wejścia-wyjścia, baz danych czy wywołań sieciowych.

const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]

Zależność od abstrakcji

IoC działa najlepiej, gdy klasy zależą od interfejsu, a nie od konkretnej klasy. Można wstrzyknąć dowolną implementację spełniającą wymagania interfejsu.

interface Logger { log(m: string): void; }
class OrderService {
  constructor(private logger: Logger) {}
}

Wstrzykiwanie przez konstruktor

Wstrzykiwanie przez konstruktor przekazuje zależności jako parametry konstruktora. Są one dostępne od razu i można je oznaczyć jako readonly, dzięki czemu pozostają jawne i wymagane.

class OrderService {
  constructor(private readonly logger: Logger) {}
}

Wstrzykiwanie przez właściwość

Wstrzykiwanie przez właściwość ustawia zależność w publicznej właściwości lub właściwości z możliwością ustawiania po utworzeniu obiektu. Jest bardziej elastyczne, ale pozwala na tymczasowe istnienie obiektu bez tej zależności.

class OrderService {
  logger!: Logger; // set after construction
  place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();

Wybór stylu

Wstrzykiwanie przez konstruktor jest preferowane w przypadku wymaganych zależności, ponieważ obiekt nigdy nie znajduje się w stanie częściowej konstrukcji. Wstrzykiwania przez właściwość należy używać w przypadku opcjonalnych współpracowników lub do przerwania cykli konstrukcji.

Zapowiedź kontenerów IoC

W dużych aplikacjach ręczne łączenie zależności staje się uciążliwe. Kontener IoC automatyzuje tworzenie i dostarczanie zależności. W kolejnych lekcjach zostanie to omówione na przykładzie InversifyJS.

Szybkie sprawdzenie

Szybkie sprawdzenie tej lekcji.

Podsumowanie

Odwrócenie sterowania przenosi tworzenie zależności poza klasę, a wstrzykiwanie zależności dostarcza je do środka. Należy opierać zależności na interfejsach, preferować wstrzykiwanie przez konstruktor w przypadku wymaganych zależności i ułatwiać testowanie przez wstrzykiwanie atrap.

Często zadawane pytania

Czy lekcja „Podstawy odwrócenia sterowania” jest bezpłatna?

Tak — pełny tekst „Podstawy odwrócenia sterowania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy odwrócenia sterowania”?

Zrozum, dlaczego i kiedy odwracać zależności Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy odwrócenia sterowania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy odwrócenia sterowania
  2. Wstrzykiwanie przez konstruktor
  3. Kontenery DI z InversifyJS
  4. Bezpieczne typowo tokeny usług
← Powrót do TypeScript Academy