Sobes.tech
Senior

Kako popraviti kršenje principa inverzije zavisnosti — predložite refaktorisanje sa odvojenim skladištem?

sobes.tech АИ

Одговор од АИ

Нарушение принципа инверсии зависимостей (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);
    }
}

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