@oop_ru

Страница 134 из 785
Evgeniy
03.03.2017
12:35:28
а di это подход созданию системы

чтобы зависимости передавались через конструктор

ну или еше как то

Aleksandr
03.03.2017
12:36:30
service locator получается некая реализация
чего-то, что мы не обсуждаем. мы же про ioc и di?

Google
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
вот пример нарушения принципы IOC
ты же зависимости там передаешь извне - почему это нарушение?

Evgeniy
03.03.2017
12:54:56
через конструктор сам создает и решает как)

а ну да пардон

просто голова уже повернута делать сразу правильнол

сейчас хотфиксану

вот сейчас http://pastebin.com/QFCMm21Q

но тогда встречный вопрос а это будет нарушением IoC

сейчас напишу

Aleksandr
03.03.2017
12:57:52
вот сейчас http://pastebin.com/QFCMm21Q
ну а что тут происходит? ты в констурктор строки передаешь.

Evgeniy
03.03.2017
12:59:04
http://pastebin.com/BnEr8rxA

ну а что тут происходит? ты в констурктор строки передаешь.
так то что в конструкторе строки это DI принцип

мы его не нарушаем

Aleksandr
03.03.2017
13:00:13
http://pastebin.com/BnEr8rxA
тут все ок.

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
так это через reflection работает
ну и ок. инъекция же

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
ну и ок. инъекция же
но опять же антипаттерн, т.к. доьавляем внешнюю зависимость от реализации di

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
омг. все все еще за di топите)
так проблема что четких определений нет, ну или я не видел

можно пример ?)

Илья
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
через autowire зависимость b вполне контролируется
зависимость внутри создаешь или извне инжектится?

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 версии)

public class A { private B b; public A() { b = new B(); } }
вот этот ахтунг все что можно вообще нарушает

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