
Sergey
11.12.2017
05:33:55
di - является, dip - нет
так что тут вопрос, может быть он про DI рассказывает?
p.s. мне кажется что рассказывать про DI в контексте IoC не выгодно

f4rt~
11.12.2017
05:34:37
погоди но ведь DI частный случай реализации DIP

Google

Sergey
11.12.2017
05:35:06
но ты можешь не использовать DIP и эксплуатировать DI
короч IoC - это изменение направления потока управления - don't call us, we call you. Пример - твой фреймворк вызывает контроллер а не контроллер дергает фреймворк и проверяет что ему надо отработать. Это нужно для реюза кода.
DIP - это изменение направления зависимостей, то есть у нас есть DIP когда направление зависимостей не совпадает с направлением потока управления. Пример - PSR-3 логгеры всякие. Когда у тебя есть абстрактный модуль, и твой проект зависит от него. Но вызываем мы какой-нибудь monolog, который так же зависит от модуля psr-3 (что бы заимплементить интрефейс). ТАким образом направление потока управление у нас осталось тем же (приложение вызывает монолог) но направление зависимостей уже поменялось - мы зависем только от psr-3, так же как и монолог.

Антон
11.12.2017
05:49:37


Sergey
11.12.2017
05:51:09
а dip с ioc это как будет?
фреймворк твой сделает тебе твой класс который нуждался в зависимости и возможно еще и сам вызовет метод какой (или кого-то кто вызовет твой класс).


Антон
11.12.2017
06:17:04
фреймворк твой сделает тебе твой класс который нуждался в зависимости и возможно еще и сам вызовет метод какой (или кого-то кто вызовет твой класс).
Ага, об этом и говорит Мартин Фаулер:
How does DIP relate to IoC and DI? Consider what happens if you use DI to inject a low-abstraction dependency? For example, I could use DI to inject a JDBC connection into a Monopoly game so it could use a SQL statement to read the Monopoly board from DB2. While this is an example of DI, it is an example of injecting a (probably) problematic dependency as it exists at an abstraction level significantly lower than the domain of my problem. In the case of Monopoly, it was created several decades before SQL databases existed, so to couple it to a SQL database introduces an unnecessary, incidental dependency. A better thing to inject into Monopoly is a Board Repository. The interface of such a repository is appropriate to the domain of Monopoly rather than described in terms of a SQL connection. As IoC is about who initiates a calling sequence, a poorly designed callback interface might force low-level details (framework) details into code you write to plug into a framework. If that's the case, try to keep most of the business stuff out of the callback method and in a POJO instead.
Друзья, смотрите, есть типы связанности, я так понял это подходит к отношению модулей:
зацепление по общей области
зацепление по содержимому
зацепление по управлению
зацепление по данным
смешанное зацепление
патологическое зацепление
Но до меня что то не до ходит, как это можно проецировать на ооп?


Aleh
11.12.2017
09:25:06
ты можешь оценивать связь любых двух кусков кода
в том числе и модулей

Sergey
11.12.2017
09:26:09
блин как я не навижу переведенные термины
"зацепление" в половине текстов это coheasion а у тебя там coupling
> как это можно проецировать на ооп?
- у тебя есть 2 объекта, которые взаимодействуют. Один зависит от другого.
- у тебя есть 3 объекта, которые взаимодействуют. И один должен вызвать в определенной последоватлеьности два других.
- у тебя есть 2 объекта, один достает данные из другого, и что-то с ними делает
ну и т.д.

Google

Sergey
11.12.2017
09:29:13
в целом главное понять что "объект" в ооп это тот же модуль. И могут быть группы объектов составляющих модуль... ну и т.д..
на разных уровнях это работает одинаково
я на русском на тему coupling/coheasion ничего не видал
ну мол из простого и легко усваиваемого. Даже на википедии уже вменяемее рассказывается

Антон
11.12.2017
09:34:13
coupling разве не зацепление? О.о я ещё видел перевод coupling, как сопряжение

Anton
11.12.2017
09:37:51
Переводить термины по обычному словарю — очень и очень плохая идея.
Термины в строгих науках как математика, физика и пр. имеют строгое Определение (Definition).
Так вот нужно искать не перевод термина, а перевод именно Определения.
К сожалению у нас нет единого регулирующего органа как научные институты для математики и физики, где есть единственно верный перевод термина и определения.

Sergey
11.12.2017
09:38:23
есть много вариантов:
coupling - связанность, зацепление, сопряжение
cohesion - связность, сцепленность, зацепление...
мне нравится вариант - coupling = внешняя связанность а cohesion = внутренняя связанность

Борис
11.12.2017
09:39:52
Предлагаю сменить название чата на "coupling vs cohesion"
Чет как не зайду - только об этом и разговоров ?

Sergey
11.12.2017
09:41:27

da horsie
11.12.2017
09:42:21


Bohdan
11.12.2017
09:42:41

Sergey
11.12.2017
09:43:29

Bohdan
11.12.2017
09:43:34
так что какое-то приближенное название/описание нужно придумать

Sergey
11.12.2017
09:43:36
иначе никакого IoC у нас тут нет

Bohdan
11.12.2017
09:43:51
чисто для того, чтобы бросать в тех, кто задает вопросы

Sergey
11.12.2017
09:43:57

Anton
11.12.2017
09:44:43
тогда можно создать глоссарий терминов. и заппинить их

Bohdan
11.12.2017
09:44:58
на гитхабке забросить

da horsie
11.12.2017
09:45:13

Google

Sergey
11.12.2017
09:45:52
или будем просто ровняться на википедию)

Bohdan
11.12.2017
09:46:33

Sergey
11.12.2017
09:47:09
в терминах зависимостей первичным должно быть приложение
отсюда и произрастают IoC и DIP
вот есть у тебя фреймворк - express.js
и приложение
function (req, res) {
res.send('goodbye horses')
}

da horsie
11.12.2017
09:48:53

Sergey
11.12.2017
09:48:59
кто будет запускать первым, подписываться на коннекшены и вызывать твое приложение?

Sergey
11.12.2017
09:49:12

Maksim (Ellrion)
11.12.2017
09:49:26
какой то бессполезный спор об очевидных вещах. а @f3ath вообще тупо тролит похоже

Sergey
11.12.2017
09:50:42
по сути IoC нам нужен что бы у нас был какой-то express.js который будет скрывать нюансы работы с http и превращать это просто в вызов нашего приложения. Ну и еще медиатор какой-то который будет дергать наш фреймворк. С операционками уже чуть интереснее. Твой фреймворк их вызывает, а не они твой фреймворк.
тебе тут не надо инвертировать поток управления
хотя опять же если ты подписался на событие - например что коннекшен пришел - то это уже можно трактовать как IoC
чет меня понесло

da horsie
11.12.2017
09:52:54
Я не троллю. Но я согласен, что для спора надо бы определиться что такое приложение. И окружение. И фреймворк.

Sergey
11.12.2017
09:53:53
ты читал вообще оригинальную публикацию где этот термин вводится?)

Google

Maksim (Ellrion)
11.12.2017
09:54:28
как бы в определении фреймворка один из пунктов это инверсия управления

Sergey
11.12.2017
09:54:38
http://www.laputan.org/drc/drc.html
именно
в этом суть фреймворков, предоставлять реюзабельный сэт инструментов и это достигается именно за счет IoC
> This inversion of control gives frameworks the power to serve as extensible skeletons.

Mykola
11.12.2017
11:02:11
всем утра, что нового?
кстате, когда говорят о IoC и DI, то все забывают соотносить это с кодом и рантаймом
DI - это про код, IoC - это про рантайм

Admin
ERROR: S client not available

Антон
11.12.2017
11:22:05

Sergey
11.12.2017
11:22:27
а вызывать можно только в рантайме)
там связывание происходит (late binding)

Антон
11.12.2017
11:25:45
Ммм, di не рантайм, фабрика рантайм?

Mykola
11.12.2017
11:26:43
di - это когда у тебя в классе нету создания сущностей, они все определены как зависимости
это про код

Sergey
11.12.2017
11:27:25
а IoC это когда мы этот код выполняем и вжух там подсоываются зависимости
(ну и не только, вжух и http запрос, вжух и аргументы консольного приложения)

Mykola
11.12.2017
11:30:01
IoC - это когда мы не общаемся с другими модулями, а общаемся с фреймворком, но это возможно только в рантайме (т.е. когда сушности инстанциированы)

Sergey
11.12.2017
11:30:29

Google

Mykola
11.12.2017
11:31:03
где ты такое определение IoC нашел? :)
идея IoC в том, что модули больше не являются управляющими конструкциями, они теряют возможность сами влиять на ход работы всего приложения
это все контролируется фреймворком, собственно и взаимодействие модулей может осуществляться только с фреймворком

Sergey
11.12.2017
11:34:29
оно не конфликтует с тем что ты сейчас описал, но мы напрямую фреймворк обычно не дергаем

Mykola
11.12.2017
11:36:19
я и не писал, что мы дергаем)
я написал "общаемся"
кстате, дергать тоже не будет нарушением ioc, если это элемент общения
ну там ивенты зафигачить
кстате, IoC довольно грусный принцип, и я бы его не продавал
именно как раз из-за того, что он реализается в основном через ивенты, а ивенты это жопа

Bohdan
11.12.2017
11:38:24

Aleh
11.12.2017
11:38:31

Mykola
11.12.2017
11:38:54
ну в системе ивентов тяжело консистентность ловить

Aleh
11.12.2017
11:38:55
че ж у тебя так с ивентов горит)
да IoC к ивентам относится также, как ивенты к консистентности
никак

Mykola
11.12.2017
11:39:17

Aleh
11.12.2017
11:39:59
тут еще конечно надо определиться, что мы под ивентами понимаем

Mykola
11.12.2017
11:40:18
асинхронно IoC делают через ивенты в основном, а синхронный никому не нужен в реалиях реалтайм приложений