💡 Dependency Injection vs Service Locator — стаття від пана Мартіна Фаулера.
- DI — це про передавання залежностей через конструктор, сеттери або інтерфейс. Це дозволяє коду не залежати від конкретної реалізації компонентів.
- Service Locator — інший варіант: спеціальний об’єкт знаходить потрібні сервіси. Але це створює залежність від самого локатора.
DI краще підходить для багаторазового використання компонентів, а локатор простіший для внутрішніх проектів.
Приклад DI через конструктор:
class MovieLister {
private MovieFinder finder;
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
А ось Service Locator:
class MovieLister {
MovieFinder finder = ServiceLocator.movieFinder();
}
Фаулер також каже, що DI краще показує залежності класу, оскільки вони явно передаються через конструктор або сеттери, а в Service Locator доводиться шукати ці залежності по всьому коду.
- DI — це про передавання залежностей через конструктор, сеттери або інтерфейс. Це дозволяє коду не залежати від конкретної реалізації компонентів.
- Service Locator — інший варіант: спеціальний об’єкт знаходить потрібні сервіси. Але це створює залежність від самого локатора.
DI краще підходить для багаторазового використання компонентів, а локатор простіший для внутрішніх проектів.
Приклад DI через конструктор:
class MovieLister {
private MovieFinder finder;
public MovieLister(MovieFinder finder) {
this.finder = finder;
}
}
А ось Service Locator:
class MovieLister {
MovieFinder finder = ServiceLocator.movieFinder();
}
Фаулер також каже, що DI краще показує залежності класу, оскільки вони явно передаються через конструктор або сеттери, а в Service Locator доводиться шукати ці залежності по всьому коду.