Sobes.tech
Назад к вопросам
Senior
9

Как исправить нарушение принципа инверсии зависимостей — предложите рефакторинг с выделением отдельного хранилища?

Компании, где спрашивали
VKVK

Ответ от нейросети

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);
    }
}

Такой рефакторинг позволяет менять реализацию хранилища без изменения бизнес-логики и упрощает тестирование через подмену зависимостей.