DI Framework

Mamy więc nową klasę Hamburger (zob poprzedni przykład), która jest łatwa do przetestowania, ale jest niekompletna - obecnie tworzenie hamburgera wymaga:

const hamburger = new Hamburger(new Bun(), new Patty('beef'), new Toppings([]));

Jednym ze sposobów uproszczenia tego być stworzenie fabryki działającej tak:

function makeHamburger() {
    const bun = new Bun();
    const patty = new Patty('beef');
    const toppings = new Toppings(['lettuce', 'tomato', 'pickles']);
    return new Hamburger(bun, patty, toppings);
}

Jest to poprawa, ale kiedy trzeba stworzyć bardziej złożone hamburgeryta fabryka stanie się niewystarczająca. Fabryka jest również odpowiedzialna za wiedzę, jak stworzyć cztery różne komponenty. To dużo dla jednej funkcji.

W tym miejscu pomocna może być struktura wstrzykiwanie zależności. Framework DI zawiera koncepcję obiektu Injector. Injector jest bardzo podobny do funkcji fabryki powyżej, ale bardziej ogólny i potężny. Zamiast jednej gigantycznej funkcji fabryki, injector ma fabrykę lub przepis (inaczej mówiąc) dla kolekcji obiektów. Z Injectorem możemy uprościć tworzeniehamburgerdo:

const injector = new Injector([Hamburger, Bun, Patty, Toppings]);
const burger = injector.get(Hamburger);