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
- Podstawy odwrócenia sterowania
- Wstrzykiwanie przez konstruktor
- Kontenery DI z InversifyJS
- Bezpieczne typowo tokeny usług