
Evgeniy
03.03.2017
12:35:28
а di это подход созданию системы
чтобы зависимости передавались через конструктор
ну или еше как то

Aleksandr
03.03.2017
12:36:30

Google

Aleksandr
03.03.2017
12:36:37

Evgeniy
03.03.2017
12:37:05
а что тогда такое ioc ? это тоже подход (принцип)
в чем он заключается

Aleksandr
03.03.2017
12:37:49
в том, чтобы не создавать инстансы зависимостей внутри компонента, а делегировать эту задачу клиенту компонента вне

Evgeniy
03.03.2017
12:38:18
ну сейчас у нас инстанты создаются внутри SL а не внутри MagicDI
получается MagicDI еще и IOC принцип

Aleksandr
03.03.2017
12:39:33
ioc можно реализовать с помощью di. Все. SL здесь не причем

Evgeniy
03.03.2017
12:40:01
хорошо антипатерн в виде MagicSL (кода из примера) он как бы тоже не нарушает IOC
получается

Aleksandr
03.03.2017
12:40:50
да
но он антипаттерн

Evgeniy
03.03.2017
12:45:48
сейчас пример напишу
http://pastebin.com/DFyiZrbU

Google

Evgeniy
03.03.2017
12:53:01
вот пример нарушения принципы IOC
так получается?

Aleh
03.03.2017
12:54:18
принцип IoC это почти принцип голливуда

Aleksandr
03.03.2017
12:54:20
ну это фабричный метод. а как тогда создавать объекты вообще?

Evgeniy
03.03.2017
12:54:39
ну за это пусть отвечает registry :D

Aleksandr
03.03.2017
12:54:52

Evgeniy
03.03.2017
12:54:56
через конструктор сам создает и решает как)
а ну да пардон
просто голова уже повернута делать сразу правильнол
сейчас хотфиксану
вот сейчас http://pastebin.com/QFCMm21Q
но тогда встречный вопрос а это будет нарушением IoC
сейчас напишу

Aleksandr
03.03.2017
12:57:52

Evgeniy
03.03.2017
12:59:04
http://pastebin.com/BnEr8rxA
мы его не нарушаем

Aleksandr
03.03.2017
13:00:13

Evgeniy
03.03.2017
13:00:31
это IoC не нарушает?

Aleksandr
03.03.2017
13:00:50
ты зависимости извне передаешь - все ок

Google

Evgeniy
03.03.2017
13:01:20
http://pastebin.com/QFCMm21Q а тут нарушаю
зависимости внутри сам определяю

Aleksandr
03.03.2017
13:02:16
какие например?
я не вижу там зависимостей

Evgeniy
03.03.2017
13:03:32
ну например a
'a' и 'b'

Aleksandr
03.03.2017
13:04:18
это не зависимости. эито строки

Evgeniy
03.03.2017
13:04:36
так строка тоже зависимость
она же в конструктор подается
или зависимость только от объекта?
для подключения к бд нет разницы какой там dsn или username и password

Aleksandr
03.03.2017
13:05:44
разницы нет - строки извне же приходят

Evgeniy
03.03.2017
13:06:12
так это мы решили что если извне это DI
или нарушения IoC это вот этот ужас

Aleksandr
03.03.2017
13:06:39
так это и есть di - ты же инжектируешь зависимость

Evgeniy
03.03.2017
13:07:30
http://pastebin.com/gVJwkB38

Aleksandr
03.03.2017
13:07:44
а вот это уже фейл

Evgeniy
03.03.2017
13:07:47
ну это di я не отрицаю
последний пример феил DI это понятно

Aleksandr
03.03.2017
13:08:14

Google

Aleksandr
03.03.2017
13:08:20
ты продолжаешь путать понятия)

Evgeniy
03.03.2017
13:08:30
хорошо мб
так есть например spring
с его autowire
и там можно фигарить вот такие выкрутасы

Aleksandr
03.03.2017
13:09:56
я не знаю как это работает, но думаю там по аннтоации инжектится зависимость из контейнера

Evgeniy
03.03.2017
13:11:27
так это через reflection работает
в начале создается объект
через reflection берет reflectionMethod конструктора

Aleksandr
03.03.2017
13:11:59

Admin
ERROR: S client not available

Evgeniy
03.03.2017
13:12:05
там смотрят зависимости (так как строгая типизация в java проблем нет)
потом смотрят свойства с autowire и через reflectionClass их проставляют
на основе типа или именованного свойста
получается так
ioc - это инверсия контроля за зависимостями
di - это когда ты зависимости внедряешь (инджектишь) для инверсии контроля
service locator - это паттерн, позволяющий держать инстансы сервисов в одном реестре
все вместе это разные вещи, но могут решать проблемы друг друга
ты все не поймешь: di и ioc - принципы. у них не может быть интерфейсов.
dependency injection - инжектируй зависимости.
service locator создает только сервисы, которые в нем находятся (и то скорее в нем фабрики, которые создают сервисы)

Aleksandr
03.03.2017
13:16:01

Google

Evgeniy
03.03.2017
13:16:35
просто я много видел разработчиков и каждый по своему понимает di, ioc, sl
в целом похоже но в деталях очень по разному
на примерах это хорошо заметно

Aleksandr
03.03.2017
13:18:08
на самом деле объяснение этих понятий заложено прямо в названиях. возможно иногда нужен контекст чтобы правильно эти названия понять

Sergey
03.03.2017
13:18:09
омг. все все еще за di топите)
некоторые di и dip путают
в особо запущенных случаях

Evgeniy
03.03.2017
13:19:06
можно пример ?)

Илья
03.03.2017
13:21:07
public class A
{
private B b;
public A()
{
b = new B();
}
}

Aleksandr
03.03.2017
13:21:33
да
http://pastebin.com/gVJwkB38

Evgeniy
03.03.2017
13:22:02
но в примере того же спринга
через autowire зависимость b вполне контролируется
public class A
{
@Autowire
private B b;
public A()
{
b = new B();
}
}

Aleksandr
03.03.2017
13:23:04

Evgeniy
03.03.2017
13:23:21
так в спринге она из вне будет
проставлятся после создания объекта

Aleksandr
03.03.2017
13:23:45

Evgeniy
03.03.2017
13:23:53
в начале конструктор, потом inject зависимостей
я правда давно со spring не возился (pre release 3 версии)