@oop_ru

Страница 132 из 785
Evgeniy
03.03.2017
10:44:59
потом возьмет следующий интерфейс и он будет зависеть от объекта а не от интерфейса

Paul
03.03.2017
10:45:20
Нет, никакой зависимости от объекта

Aleh
03.03.2017
10:45:20
Отлично. Дальше где нужно у тебя class Compressor<W: WriterInterface> {}
вопрос откуда в классе появится этот W

Evgeniy
03.03.2017
10:45:46
у тебя задача тебе надо объект для сохранения файлов

Google
Evgeniy
03.03.2017
10:45:51
тебе надо WriterInterface

класс например сохраняет данные

на входе в конструторе он получает объект WriterInterface

и в него сохраняет данные (файлы какие то) например те что загрузил пользователь

Paul
03.03.2017
10:46:36
вопрос откуда в классе появится этот W
Если конструктор специфицирован (ATC), то можно внутри, если это какой-то выходной, как например аля функция сжатия по lzw: pub fn compress<R: Read, W: BitWrite>(input: R, mut output: W) -> IoResult<(usize, usize)> { ... } То при вызове функции. И уже ПОСЛЕ этого только DI через отдельный метод-вспрыскиватель

Evgeniy
03.03.2017
10:46:54
он берет фаил что грузанул пользователь и передает его в объект реализующий WriterInterface

Paul
03.03.2017
10:47:01
Мой поинт не в том, что DI НИКОГДА не надо. Мой поинт в том, что оно не надо для модулей, а для классов оно надо в самую последнюю очередь

Evgeniy
03.03.2017
10:47:53
ок у тебя есть метод по загрузке файла

Aleh
03.03.2017
10:47:53
максимум роут прописать

Google
Evgeniy
03.03.2017
10:48:05
и тебе надо этот фаил сохранить

Paul
03.03.2017
10:48:32
ты дабл диспатч предлагаешь делать вместо иньекции в обьекты?
Если диспатч возможен, то да, если нет, то инъекция

максимум роут прописать
Т.е. теперь я не могу выдрать нужные мне классы, нужно ещё и всю систему ижектов, так?

И всё ради чего, не пойму?

Aleh
03.03.2017
10:49:26
теперь ты можешь взять 3 файла и перемещать их из проекта в проект

Paul
03.03.2017
10:49:51
В 99% случаев у тебя варьироваться ничего не будет, т.е. у тебя будет compress<SomeType>(), в остальных спустится сверху

откуда выдрать?
Из системы. Не важно, для тестирования это или просто вынести в библиотеку

Aleh
03.03.2017
10:50:12
наоборот

ты легко можешь выдраьт

потому что зависимости нет

Paul
03.03.2017
10:50:35
Дык, с дженериками их тоже нет. Только вот они явные

Aleh
03.03.2017
10:50:38
берешь только объект и его интерфейсы

Paul
03.03.2017
10:50:44
а не какая-то функция с забайдеными объектами

Aleh
03.03.2017
10:50:45
так дженерик это тоже самое

Paul
03.03.2017
10:50:46
Так, ладно, у меня встреча через пять минут, потом вернусь. Можете пока накидать )

Aleh
03.03.2017
10:50:47
тот же DI

Paul
03.03.2017
10:50:51
Только оно *уже есть*

Aleh
03.03.2017
10:51:02
т.е. он нужен все-таки всегда?)

Google
Aleh
03.03.2017
10:51:09
Только оно *уже есть*
что значит уже есть

ты просто в код добавил дженерик

Paul
03.03.2017
10:51:18
Если ты дженерики к di относишь, то пожалуйста

Aleh
03.03.2017
10:51:18
и ничего не изменилось)

который там может нужен, может нет

Paul
03.03.2017
10:51:35
но без object injection я бы так не делал

Мы точно об одном говорим?

Evgeniy
03.03.2017
10:52:19
похоже что нет

Sergey
03.03.2017
10:52:29
я вообще не понимаю что происходит

Evgeniy
03.03.2017
10:52:32
но у тебя свои взгляды если все работает то хорошие взгляды)

Paul
03.03.2017
10:52:33
Я предлагаю делать, скажем, класс Compress<R, W> {} , а ты предлагаешь Compress {}, который вызывает функцию с забайдеными зависимостями. Так?

Sergey
03.03.2017
10:52:34
и о чем вы спорите

Sergey
03.03.2017
10:52:50
Aleh
03.03.2017
10:52:54
ничего ж не изменилось

Sergey
03.03.2017
10:53:06
говорят DI не нужен
если модули есть нормальные - то да

Paul
03.03.2017
10:53:56
ты предлагаешь аргументы конструктора в дженериках давать?)
Если ATC, то вполне. Если нет, то уже injection, но на уровне объекта, а не модуля

Google
Paul
03.03.2017
10:54:11
ладно, вернусь после встречи xd

Aleh
03.03.2017
10:54:26
если модули есть нормальные - то да
вопрос в нормальных модулях

где язык, в котором они есть?)

Evgeniy
03.03.2017
10:59:19
где язык, в котором они есть?)
язык не гарантирует, где проект в котором они есть?)

Aleh
03.03.2017
10:59:38
ну, тогда что такое нормалные модули

Sergey
03.03.2017
11:02:11
модули питона?

Aleh
03.03.2017
11:02:28
все равно от DI не уйдешь

Evgeniy
03.03.2017
11:02:39
он всюду

Aleh
03.03.2017
11:02:49
т.е. в меине придется подключить модули и склеить их

Evgeniy
03.03.2017
11:02:58
а вот я наброшу, чем отличается DI от IOC ?))))

Admin
ERROR: S client not available

Rodion
03.03.2017
11:03:26
буквы разные

и задачи

Evgeniy
03.03.2017
11:03:44
буквы разные отличный аргумент :D

Aleh
03.03.2017
11:03:49
а вот я наброшу, чем отличается DI от IOC ?))))
чем отличается двухколесное транспортное средство и велосипед?

Evgeniy
03.03.2017
11:03:52
а по задачам подробней)

Aleh
03.03.2017
11:04:17
чтобы точнее соответствовать исходному вопросу: велосипед и двухколесное транспортное средство

Evgeniy
03.03.2017
11:04:25
насколько я понимаю IOC эта штука которая может строить зависимости в зависимости от параметра

например есть env = 'production' и тут реальное подключение к бд

есть env = 'test' и тут подключение к бд меняется например на sqlite

Google
Evgeniy
03.03.2017
11:05:21
а при env = 'dev' подлключение к бд с другими параметрами)))

я это так понимаю, но возможно я не прав это в ioc

Rodion
03.03.2017
11:05:44
у @fes0r была статья про это на хабре

Evgeniy
03.03.2017
11:06:25
просто думал может мне объяснят в чем я не прав )

потому разницу между ServiceLocator и DI или IOC все понимают, фаулер об этом писал в 2004 году

там и про DI и IOC написано но как то не понял я)

Aleh
03.03.2017
11:07:41
IoC это подход, DI конкретная техника ну

мы точно также можем инвертировать на событиях

Evgeniy
03.03.2017
11:08:28
так ServiceLocator тоже подход

Aleh
03.03.2017
11:08:33
и он тоже IoC

Evgeniy
03.03.2017
11:08:40
когда ты даешь di аргументом классу и он сам что надо грузит

а IOC Это ты даешь аргументами нужные объекты ?

Aleh
03.03.2017
11:09:16
IoC это идея, принцип или еще как-то так

он в себя включает и Di, и локатор, и ивенты, и делегаты

и фабрики и т.д. и т.д.

Evgeniy
03.03.2017
11:09:50
IOC принцип ок.

что гласит этот принцип ?)

передавать аргументами конструктора нужные объекты, а нужные объекты брать из di ?

а serviceLocator получается тоже принцип

Rodion
03.03.2017
11:12:47
не только конструктора же, не?

Evgeniy
03.03.2017
11:12:53
которые аргументом передает не нужные объекты а di из которого класс сам загружает что ему нужно?

не только конструктора же, не?
ну я пока всякие извращенные варианты не рассматриваю, упрощаю

Rodion
03.03.2017
11:13:23
di - это ж метод внедрения зависимостей для уменьшения coupling'а (не?)

Страница 132 из 785