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 hamburgery
ta 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ć tworzeniehamburger
do:
const injector = new Injector([Hamburger, Bun, Patty, Toppings]);
const burger = injector.get(Hamburger);