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

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

Aleh
03.03.2017
10:45:20

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 НИКОГДА не надо. Мой поинт в том, что оно не надо для модулей, а для классов оно надо в самую последнюю очередь

Aleh
03.03.2017
10:47:21
в моем примере addToCatalog - та часть, которую возьмет DI framework и сам разрулит зависимости
мне уже ничего делать не надо

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

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

Sergey
03.03.2017
10:48:02

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
и о чем вы спорите

Aleh
03.03.2017
10:52:49

Sergey
03.03.2017
10:52:50

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

Sergey
03.03.2017
10:53:06

Evgeniy
03.03.2017
10:53:13
:D

Aleh
03.03.2017
10:53:55

Paul
03.03.2017
10:53:56

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

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'а (не?)