Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
Что-то не могу понять этот принцип. Информация, которую я читал, выглядит противоречивой.

Вот оригинал:

https://en.wikipedia.org/wiki/Dependency_inversion_principle
High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).
Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.


1. Какой определить у какого модуля/класса выше уровень?
2. Могут ли зависеть низкоуровые модули от высокоуровневых?
17 июн 19, 16:08    [21909927]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
зависимость должна быть в одну сторону. т.е. если на пальцах твой репозиторий не должен знать ничего о контроллере и сервисах. твой сервис ничего не должен знать о контроллере, твой контроллер в идеальном мире ничего не должен знать о тех обоих. вроде так мартин вещал. если речь об аббревиатуре солид.
17 июн 19, 16:26    [21909950]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT
зависимость должна быть в одну сторону. т.е. если на пальцах твой репозиторий не должен знать ничего о контроллере и сервисах. твой сервис ничего не должен знать о контроллере, твой контроллер в идеальном мире ничего не должен знать о тех обоих. вроде так мартин вещал. если речь об аббревиатуре солид.


Речь про SOLID

Это отвечаете на какой вопрос?
17 июн 19, 16:42    [21909982]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
1) где верх где низ - это зависит от твоей архитектуры и что ты там пишешь я хз. главное что вызовы из одного слоя должны ходить только в другой и никак не наоборот. если вдруг тебе понадобилось в другую сторону - ты делаешь что-то не так.
2) тут идея в том, что объясняя на пальцах, если у тебя какая-нибудь классика контроллер-сервис-репозиторий это подразумевается, что из репозиторя ты не должен обращаться к сервису, или контроллеру. только так: контроллер -> сервис -> репозиторий.
17 июн 19, 18:20    [21910119]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT
1) где верх где низ - это зависит от твоей архитектуры и что ты там пишешь я хз. главное что вызовы из одного слоя должны ходить только в другой и никак не наоборот. если вдруг тебе понадобилось в другую сторону - ты делаешь что-то не так.
2) тут идея в том, что объясняя на пальцах, если у тебя какая-нибудь классика контроллер-сервис-репозиторий это подразумевается, что из репозиторя ты не должен обращаться к сервису, или контроллеру. только так: контроллер -> сервис -> репозиторий.


Это я и так всё знаю, но это не выглядит соответсвующе формулировке. Вчитайтесь


автор
High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).

Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.


1. Какой определить у какого модуля/класса выше уровень?
2. Могут ли зависеть низкоуровые модули от высокоуровневых?

контроллер выше сервиса?
18 июн 19, 00:18    [21910220]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
Точка входа это верхний уровень - что тебе еще не понятно? Читай книжку Мартина "чистая архитектура" Там несколько глав посвящены солиду (который тоже Мартин собрал)
18 июн 19, 00:50    [21910226]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT,

Да дело не в чтении, а в понимании.

В случае спринга точка входа запроса это контроллер.

То есть контроллер это верхняя точка, сервис на уровень ниже, репозиторий ещё ниже.


теперь берём фразу
автор
High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).


Почему она написана именно так?

Если как Вы говорите, то надо писать:
автор
low-level modules should not depend High-level modules.
18 июн 19, 14:10    [21910660]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5671
questioner
берём фразу
автор
High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).


Почему она написана именно так?

- вероятно потому, что здесь смысл заключен во втором предложении, про абстрации, что бы не писали:
@Autowired
private MyServiceImpl service;

а писали:
@Autowired
private MyService service;
18 июн 19, 14:50    [21910709]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
fixxer
Member

Откуда:
Сообщений: 720
И контроллер и репозиторий это все модули низкого уровня, потому что содержат детали реализации. Модули высокого уровня это доменная модель и бизнес логика. Естественно в правиле DI речь идет о зависимости времени компиляции, естественно зависимость времени исполнения зачастую направлена в обратную сторону. Отсюда и слово Inversion.
18 июн 19, 14:52    [21910711]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
инверсия с английского вообще переводится как гомосексуализм
18 июн 19, 15:47    [21910757]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
Kachalov
questioner
берём фразу
пропущено...


Почему она написана именно так?

- вероятно потому, что здесь смысл заключен во втором предложении, про абстрации, что бы не писали:
@Autowired
private MyServiceImpl service;

а писали:
@Autowired
private MyService service;



а в первую фразу для красоты написали?
18 июн 19, 16:00    [21910771]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT
инверсия с английского вообще переводится как гомосексуализм


очень познавательно. А главное очень относится к теме.
18 июн 19, 16:03    [21910772]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
да. гомосексуальная зависимость. всё верно. блин. ну посмотри ж ты книжку того чела который собрал эти принципы а. там немного страниц и всё объяснено картинками тем челом кто эту диай и сформулировал как бестпрактиз
18 июн 19, 16:12    [21910781]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT
да. гомосексуальная зависимость. всё верно. блин. ну посмотри ж ты книжку того чела который собрал эти принципы а. там немного страниц и всё объяснено картинками тем челом кто эту диай и сформулировал как бестпрактиз


Судя по тому, что ты прочитал, а объяснить не можешь эта книжка тебе не помогла.
18 июн 19, 17:33    [21910879]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
да. ментор из меня так себе. особенно когда слушатели деревянные. согласен.
18 июн 19, 17:55    [21910900]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
mayton
Member

Откуда: loopback
Сообщений: 42343
andreykaT, очень хотел что-то процитировать из Омара-Хайама на тему мудрецов и... ну и всех остальных. Но забыл.
18 июн 19, 17:57    [21910902]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
Нужели никто не может ответить?
24 июн 19, 12:05    [21913941]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
я вчера перечитал книжку мартина на эту тему.. ))
в общем, он там всё же топит за интерфейсы. типа зависимости между компонентами делаешь через интерфейсы а не напрямую с реализациями.
24 июн 19, 12:42    [21913969]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
[img]https://i.ibb.co/nzRwMcm/scheme1.png[/img]
24 июн 19, 12:45    [21913970]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
автор
Обратите внимание, что поток управления пересекает извилистую линию в направлении, обратном направлению зависимостей в исходном коде. Зависимости следуют в направлении, противоположном направлению потока управления — именно поэтому принцип получил название принципа инверсии зависимости
24 июн 19, 12:46    [21913974]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
mayton
Member

Откуда: loopback
Сообщений: 42343
Новичку проще понять эту тему если представить что между модулями стоит сеть.
24 июн 19, 13:13    [21913998]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
andreykaT
автор
Обратите внимание, что поток управления пересекает извилистую линию в направлении, обратном направлению зависимостей в исходном коде. Зависимости следуют в направлении, противоположном направлению потока управления — именно поэтому принцип получил название принципа инверсии зависимости


Как это всё соотносится с фразой:

автор
High-level modules should not depend on low-level modules.
24 июн 19, 14:32    [21914112]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1850
mayton
Новичку проще понять эту тему если представить что между модулями стоит сеть.


Новичком меня тяжело назвать)
24 июн 19, 14:32    [21914114]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
mayton
Member

Откуда: loopback
Сообщений: 42343
questioner
mayton
Новичку проще понять эту тему если представить что между модулями стоит сеть.


Новичком меня тяжело назвать)


Извини если обидел.
24 июн 19, 15:10    [21914145]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2420
questioner
andreykaT
пропущено...


Как это всё соотносится с фразой:

автор
High-level modules should not depend on low-level modules.

пока не вижу явной связи. по крайней мере в первоисточнике того кто этот принцип обосновал и в явном виде. что там в википедии хотели сказать хз. НО эта фраза есть в утверждениях к другим буквам солида.
24 июн 19, 15:43    [21914185]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Java Ответить