Разрыв циклических зависимостей с помощью Принципа инверсии зависимостей
В книге Роберта Мартина "Чистая Архитектура" написано:
Существует два метода для того, чтобы разорвать циклическую зависимость:
- Применить принцип инверсии зависимостей (Dependency Inversion Principle; DIP) . В этом случае, как показано на рис. 14.3, можно было бы создать интерфейс, определяющий методы, необходимые классу User, затем поместить этот интерфейс в Entities и унаследовать его в Authorizer . Это обратило бы зависимость между Entities и Authorizer и разорвало цикл .
Но ведь это никак нас не избавить от циклической зависимости, так как вместо этого:
public Entities(Authorizer auth){
/* some code */
}
Мы получим это:
public Entities(Permission perm) {
/* some code */
}
Но в конструктор мы все равно будем передавать имплементацию, т.е. Authorizer, которому внутри нужен Entities и ничего не изменится, проблема не уйдет, в чем я не прав?
