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

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

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

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

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

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


Речь про SOLID

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

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

Откуда:
Сообщений: 1712
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

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

Откуда:
Сообщений: 1712
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

Откуда: Москва
Сообщений: 5632
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

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

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

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


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

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

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



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

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


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

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

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


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

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

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

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

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

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

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

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

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


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

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

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


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

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


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


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

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


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

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

пока не вижу явной связи. по крайней мере в первоисточнике того кто этот принцип обосновал и в явном виде. что там в википедии хотели сказать хз. НО эта фраза есть в утверждениях к другим буквам солида.
24 июн 19, 15:43    [21914185]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

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

https://stackoverflow.com/a/3780447/2674303
In laymen's terms: high level modules depend on low level modules, but shouldn't depend on their implementation. This can be achieved by using interfaces, thus decoupling the definition of the service from the implementation.


Я пришёл к выводу, что под любым модулем автор понимает имплементацию и причина непонимания кроется то ли в терминологии, то ли в лингвистике и если по русски, то это будет звучать так, что Модули высокого уровня вместо того, чтобы зависеть от имплементации модулей нижнего уровня должны зависеть от их обобщённых интерфейсов. Таким образом написав другую имплементацию мы сможем её переиспользовать не меняя остальной код.

Конечно выглядит слегка притянутым за уши, но лучшего ничего не придумал.
24 июн 19, 15:58    [21914200]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
с другой стороны, там есть такая фраза:

автор
Извилистая линия делит систему на два компонента: абстрактный и конкретный. Абстрактный компонент содержит все высокоуровневые бизнесправила приложения. Конкретный компонент содержит детали реализации
этих правил.
Обратите внимание, что поток управления пересекает извилистую линию
в направлении, обратном направлению зависимостей в исходном коде.

возможно, тут разгадка что такое хайлевел модуль.

и дальше это:
автор
Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.
24 июн 19, 15:59    [21914201]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
andreykaT
с другой стороны, там есть такая фраза:

автор
Извилистая линия делит систему на два компонента: абстрактный и конкретный. Абстрактный компонент содержит все высокоуровневые бизнесправила приложения. Конкретный компонент содержит детали реализации
этих правил.
Обратите внимание, что поток управления пересекает извилистую линию
в направлении, обратном направлению зависимостей в исходном коде.

возможно, тут разгадка что такое хайлевел модуль.



А там это где? в книге?

Ох как загнули с линией, остроумно))

Я не уверен, что до конца понял, что ключевую фразу
автор
Обратите внимание, что поток управления пересекает извилистую линию
в направлении, обратном направлению зависимостей в исходном коде.


типо по интерфейсу найдётся имплементация? то бишь полиморфизм == Dependency inversion?
24 июн 19, 16:07    [21914212]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
не совсем. насколько я понимаю мартин всячески акцентирует внимание что модули между собой должны общаться исключительно через интерфейсы и исключительно в одном направлении.

там - это да. это в книге мартина где он поясняет за каждую букву солида.
24 июн 19, 16:46    [21914242]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
вообще, в тех же ранних спрингах например, бины инстанциировались фабрикой по интерфейсу. т.е. хочешь получить бин интерфейсаА говори фабрике хочу получить бин по интерфейсуА, оно идет ищет кандидатов и по нему строит этот бин. но тут момент в том что как правило, по интерфейсуА есть класс всегда только один А )) если же их больше то ты явно квалифаером указываешь какой именно объект по какому классу по интерфейсу построить.

херня короче.
24 июн 19, 16:49    [21914246]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
он пошел дальше у него и фабрика - это интерфейс.
24 июн 19, 16:50    [21914248]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
mayton
Member

Откуда: loopback
Сообщений: 40989
andreykaT
не совсем. насколько я понимаю мартин всячески акцентирует внимание что модули между собой должны общаться исключительно через интерфейсы и исключительно в одном направлении.

По поводу направления. Мне кажется это отсылка к CQRS и к принципу Tell-do-not-ask.
Это хороший паттерн для перформанса но в некоторых случаях он может сделать
простоую систему - неоправданно сложной. Поэтому... it depends. И это надо
обсуждать на уровне лиц которые принимают важные проектные решения.
24 июн 19, 17:26    [21914281]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
дак ЦКуРС это больше о разделении обязанностей. так и хочется сказать сингл респонсибилити (но это несколько о другом, как оказалось,с точки зрения мартина). а-ля. если у тебя что-то читает, то оно не дложно ничего изменять. и, в свою очередь частично о разделении интерфейсов. не уверен, что это как то относится к депенденси инвершн.
24 июн 19, 17:54    [21914314]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
questioner,
Что тут непонятно?
https://ru.m.wikipedia.org/wiki/Принцип_инверсии_зависимостей
В правилах форума русскоязычность общения
24 июн 19, 19:14    [21914364]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

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

там - это да. это в книге мартина где он поясняет за каждую букву солида.
по данному сабжу в вики черным по белому сказано что стрелки связи меняют направление.
Зависимость убирается.
24 июн 19, 19:51    [21914379]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
PetroNotC Sharp
andreykaT
не совсем. насколько я понимаю мартин всячески акцентирует внимание что модули между собой должны общаться исключительно через интерфейсы и исключительно в одном направлении.

там - это да. это в книге мартина где он поясняет за каждую букву солида.
по данному сабжу в вики черным по белому сказано что стрелки связи меняют направление.
Зависимость убирается.

какие стрелки?
24 июн 19, 21:56    [21914414]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
Связи
questioner
1. Какой определить у какого модуля/класса выше уровень?
24 июн 19, 23:21    [21914428]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
andreykaT,
Там картинки есть. Посмотри.
24 июн 19, 23:22    [21914429]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1871
questioner
1. Какой определить у какого модуля/класса выше уровень?
2. Могут ли зависеть низкоуровые модули от высокоуровневых?

1. Данные поступают в первый, потом во второй и т.д. классы/методы, кто раньше получил данные, тот и на верхнем уровне,
в частности контроллер(в который добавлен сервис), затем сервис(в котором репозиторий и всякие конвертеры и мапперы), затем репозиторий.
2. Нет, не могут. Нельзя в сервис или в репозиторий добавить контроллер, нельзя в репозиторий добавить сервис. И всё в таком духе.

И все они связаны через интерфейсы.
Вроде всё понятно. Наверное, надо реальный проект посмотреть, сразу вся логика становится очевидной и логичной.
25 июн 19, 08:50    [21914529]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
fixxer
Member

Откуда:
Сообщений: 711
Nixic
1. Данные поступают в первый, потом во второй и т.д. классы/методы, кто раньше получил данные, тот и на верхнем уровне,


Какая же чушь. Потом это читают новички и из них вади вырастают.
25 июн 19, 08:58    [21914534]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1871
Данными могут быть не только объекты со значениями в полях переданные в контроллер, но и какие-то команды от UI, например, клик по кнопке, который вызывает метод контроллера.
25 июн 19, 08:59    [21914536]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1871
fixxer
Nixic
1. Данные поступают в первый, потом во второй и т.д. классы/методы, кто раньше получил данные, тот и на верхнем уровне,


Какая же чушь. Потом это читают новички и из них вади вырастают.

Давай объясни по другому тогда.
25 июн 19, 09:00    [21914537]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
fixxer
Member

Откуда:
Сообщений: 711
Nixic
fixxer
пропущено...


Какая же чушь. Потом это читают новички и из них вади вырастают.

Давай объясни по другому тогда.


Я уже объяснял в этой ветке.
25 июн 19, 09:01    [21914539]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1871
fixxer
Nixic
пропущено...

Давай объясни по другому тогда.


Я уже объяснял в этой ветке.

Ну да, прочитал, раньше к теории особо не обращался, просто на практике использовал эти же принципы
https://www.baeldung.com/java-dependency-inversion-principle
Но в комментарии, можно было и не опускаться до уровня форумчанина из 1С ))
25 июн 19, 09:20    [21914556]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
PetroNotC Sharp,

Братюнь, ты предоставил только одну ссылку на которой нет стрелок.
Про буржуазный язык прости, но 90% информации на нём - рекомендуется как можно раньше понять, что не надо его чураться
25 июн 19, 13:34    [21914847]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
questioner
Братюнь, ты предоставил только одну ссылку на которой нет стрелок.
там ссылка второго уровня.
Там больше и читать нечего.

questioner
не надо его чураться

Я не чураюсь. Я прочитал обе вики, а ты русскую не читал, и сейчас опять не прочитал все ссылки там на обсуждение.
И самое главное КОД С ПРИМЕРАМИ.
25 июн 19, 13:45    [21914858]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
Nixic
questioner
1. Какой определить у какого модуля/класса выше уровень?
2. Могут ли зависеть низкоуровые модули от высокоуровневых?

1. Данные поступают в первый, потом во второй и т.д. классы/методы, кто раньше получил данные, тот и на верхнем уровне,
в частности контроллер(в который добавлен сервис), затем сервис(в котором репозиторий и всякие конвертеры и мапперы), затем репозиторий.
2. Нет, не могут. Нельзя в сервис или в репозиторий добавить контроллер, нельзя в репозиторий добавить сервис. И всё в таком духе.

И все они связаны через интерфейсы.
Вроде всё понятно. Наверное, надо реальный проект посмотреть, сразу вся логика становится очевидной и логичной.


Человек который прочитал только заголовок detected.
25 июн 19, 13:46    [21914859]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
PetroNotC Sharp
questioner
Братюнь, ты предоставил только одну ссылку на которой нет стрелок.
там ссылка второго уровня.
Там больше и читать нечего.

questioner
не надо его чураться

Я не чураюсь. Я прочитал обе вики, а ты русскую не читал, и сейчас опять не прочитал все ссылки там на обсуждение.
И самое главное КОД С ПРИМЕРАМИ.


Вот этого перца? https://blog.byndyu.ru/2009/12/blog-post.html

этого читал причём ещё до публикации вопроса
25 июн 19, 13:48    [21914864]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
забыл ник
Member

Откуда:
Сообщений: 2811
questioner,
а зачем тебе понимать чбе-бы-то-ни-было толкование? Вообще при чтении этой темы меня не покидают ощущение что я нахожусь в кружке толкователей корана
25 июн 19, 13:51    [21914871]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
забыл ник
questioner,
а зачем тебе понимать чбе-бы-то-ни-было толкование? Вообще при чтении этой темы меня не покидают ощущение что я нахожусь в кружке толкователей корана
+1
))
25 июн 19, 13:58    [21914878]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
questioner
этого читал причём ещё до публикации вопроса
тогда в чем вопрос?
Тут такое дело.
Одни угадывают DI с двух нот. Другие с 3_х. А третьи всю жизнь используют, но с одной ноты не угадывают.
Может толкование такое. Или учителя попались такие.
Попробуй на французском толкования.
Я лично предпочмтаю примеры.
Примеры понятны? В коде?
25 июн 19, 14:03    [21914883]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
PetroNotC Sharp
questioner
этого читал причём ещё до публикации вопроса
тогда в чем вопрос?
Тут такое дело.
Одни угадывают DI с двух нот. Другие с 3_х. А третьи всю жизнь используют, но с одной ноты не угадывают.
Может толкование такое. Или учителя попались такие.
Попробуй на французском толкования.
Я лично предпочмтаю примеры.
Примеры понятны? В коде?


Надо всё таки прочитать топик с начала) Вы ничего нового не открыли. В целом я думаю в какой-то степени мы докопались до истины.
25 июн 19, 14:07    [21914889]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
questioner,
Да. Я ничего нового не открывал). Даль ссыль на русские примеры и картинки.
Я все понял по ним.
Кто не понял, пусть еще пишет).
25 июн 19, 14:10    [21914898]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
questioner
Member

Откуда:
Сообщений: 1712
забыл ник
questioner,
а зачем тебе понимать чбе-бы-то-ни-было толкование? Вообще при чтении этой темы меня не покидают ощущение что я нахожусь в кружке толкователей корана


Ну вроде это написано не 100 лет назад. Поэтому выглядит, что "толковать" ничего не надо, а толкователей в статьях пруд пруди. А потому, что написано настолько "забористо", что с ходу не понятно, что хотел сказать автор. Я понимаю, что это обобщенные абстрактные принципы, но тем не менее, приятно понимать оригинал. Вдруг там что-то ещё есть)

Просто фраза "модули высокого уровня не должны зависеть от модулей нижнего уровня" для меня выглядит реально противоречивой. По факту же модули высокого уровня(контроллеры из всем известного spring mvc например) зависят от сервиса. Ну вытащу я этот сервис в интерфейс - ок - буду зависеть от интерфейса модуля нижнего уровня. Я бы всё равно это оценил таким образом, что модуль высокого уровня зависит от модуля нижнего уровня хоть и через его интерфейс.
25 июн 19, 14:15    [21914907]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
chpasha
Member

Откуда:
Сообщений: 7966
questioner
Просто фраза "модули высокого уровня не должны зависеть от модулей нижнего уровня" для меня выглядит реально противоречивой. По факту же модули высокого уровня(контроллеры из всем известного spring mvc например) зависят от сервиса. Ну вытащу я этот сервис в интерфейс - ок - буду зависеть от интерфейса модуля нижнего уровня

в чем противоречие? контроллер не зависит от сервиса, он зависит от контракта (интерфейса) - про сервис он может ничего не знать вплоть до инстанциирования в рантайме.
25 июн 19, 14:30    [21914928]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
questioner,
Ну, там, все эти буквы и SOLID конечно взаимосвязаны.
И можно придраться к формулировке.
Тут легче на примере кода.
Когда связь по интерфейсу, ты убираешь строку import unitClassABC из другого класса.
То есть слабая связанность при построении больших систем.
У тебяпоявляется 100 классов вместо 3х сильносвязанных))
25 июн 19, 14:31    [21914929]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
перечитываю книжку мартина. короче, он диай связывает с ацикличностью зависимостей и ацикличным графом зависимостей.
Кроме того, он ясно поясняет что с его точки зрения зависимость - это скажем в джаве, вызов метода какого-то класса и импорт этого класса в твой класс. т.е. если у тебя есть класс А и в нем импорт класса Б - это зависимый класс.

далее, разрыв циклических зависимостей он предлагает разрыванием через ДИ, по-сути предлагая создавать еще один компонент куда импортятся оба и заюзан интерфейс и типа опа зависимость разорвана.
8 июл 19, 14:02    [21922686]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
в данном утверждении:

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


на мой взгляд следует понимать,что если у тебя класс А класс Б класс Ц, то в классе А должны быть импорты Б, в Б - импорты Ц, но

в Ц и Б не должно быть импортов А.

если по той или иной причине это надо - создаем интерфейс и наследуем его в одном и импортим в другом по интерфейсу.
8 июл 19, 14:04    [21922687]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
andreykaT
Кроме того, он ясно поясняет что с его точки зрения зависимость - это скажем в джаве, вызов метода какого-то класса и импорт этого класса в твой класс. т.е. если у тебя есть класс А и в нем импорт класса Б - это зависимый класс.
да. Или по простому выше писал, наличие строки вверху import.
Нет строки - нет зависимости.
8 июл 19, 14:11    [21922695]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9178
PetroNotC Sharp
по простому выше писал, наличие строки вверху import.
Нет строки - нет зависимости.
Квалифицированные идентификаторы уже отменили?
8 июл 19, 16:25    [21922870]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
Basil A. Sidorov
PetroNotC Sharp
по простому выше писал, наличие строки вверху import.
Нет строки - нет зависимости.
Квалифицированные идентификаторы уже отменили?

разверни ответ?
8 июл 19, 16:48    [21922891]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
andreykaT,
Ну, формально он прав. Можно без импорт написать полное имя и будет связанный код.
В шарпе и С++ IDE не дает так писать.
Имхо
8 июл 19, 17:05    [21922914]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
andreykaT
Member

Откуда:
Сообщений: 2181
PetroNotC Sharp
andreykaT,
Ну, формально он прав. Можно без импорт написать полное имя и будет связанный код.
В шарпе и С++ IDE не дает так писать.
Имхо

ну это обман. суть в том что ты в своем классе делаешь вызовы методов другого класса. и в этом смысле ты имеешь зависимость что если поведение того другого класса изменится - твой код очевидно тоже придется менять. (может нет).
8 июл 19, 18:00    [21922967]     Ответить | Цитировать Сообщить модератору
 Re: Dependency inversion  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 552
andreykaT,
Да. Мне использование имени с пакетом тоже не нравится в этом смысле.
8 июл 19, 18:13    [21922983]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Java Ответить