Переработано с использованием DI