Back to questions
VK
Senior
8
Как исправить нарушение принципа инверсии зависимостей — предложите рефакторинг с выделением отдельного хранилища?
Companies where asked
Answer from AI
sobes.tech AI
Нарушение принципа инверсии зависимостей (Dependency Inversion Principle) часто проявляется, когда высокоуровневые модули зависят от низкоуровневых напрямую, вместо абстракций.
Чтобы исправить это, нужно выделить отдельный интерфейс хранилища и реализовать его в отдельном классе. Затем высокоуровневый модуль будет зависеть от интерфейса, а не от конкретной реализации.
Пример на Java:
// Интерфейс хранилища
public interface UserRepository {
User findById(String id);
void save(User user);
}
// Реализация хранилища
public class UserRepositoryImpl implements UserRepository {
// реализация методов доступа к БД
}
// Сервис, зависящий от абстракции
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUser(String id) {
return userRepository.findById(id);
}
}
Такой рефакторинг позволяет менять реализацию хранилища без изменения бизнес-логики и упрощает тестирование через подмену зависимостей.