
Андрэ
29.08.2017
13:19:27
Да куда уж)

Aleh
29.08.2017
13:23:10

Max
29.08.2017
13:47:57
а кто что думает на счет такого кейса - есть сущность Wallet и есть 3rd пати ApiClient апишка которая достает Balance этого кошелька.
Есть две идейки реализации, сделать сервис $balanceProvider->getBalanceForWallet(Wallet $wallet): Balance c зависимостью ApiClient или же прокидывать клиент как аргумент в сущность $wallet->balance(ApiClient $client): Balance
второй вариант нравится больше так не нарушает инкапсуляцию аггрегата и не нужно плодить еще один сервис, но вот если нужно будет использовать в других сервисах, то нужно будет пробрасовать клиент извне

Google

Aleh
29.08.2017
13:50:49
а почему провайдера не прокидывать?

Max
29.08.2017
13:50:55
Мне наоборот второй вариант выглядит менее логичным. Метод balance() у кошелька, который принимает APIClient ???

Aleh
29.08.2017
13:51:21

Max
29.08.2017
13:56:30

Aleh
29.08.2017
13:56:37

Max
29.08.2017
13:59:33

Max
29.08.2017
14:02:05
Я потому и написал, что выглядит это не красиво

Max
29.08.2017
14:45:39
да
хм, как-то сложно ... идея в том чтобы полностью убрать зависимость от инфраструктуры, те от ApiClient?

Serge
29.08.2017
15:44:01
выделить из ApiClient частичные интерфейсы по операциям. Например, IPasswordChangingService.

Aleh
29.08.2017
16:40:46

da horsie
29.08.2017
16:44:45
Не про ООП, но не могу не поделиться https://www.theregister.co.uk/2017/08/25/vw_engineer_gets_3yrs_for_emissionbusting_sw/

Sergei
29.08.2017
16:48:44
С ООП у них может и всё хорошо было.

sic transit
29.08.2017
21:31:28

Google

Max
29.08.2017
21:32:28
хм, а причем здесь фасад?

sic transit
29.08.2017
21:33:02

Max
29.08.2017
21:33:35
вот кому сейчас легко?!))

sic transit
29.08.2017
21:34:07
Не вникал, а что там от апи абстрагироваться нужно, не? Здесь кто-то сказал: "Убрать лишнюю зависимость от апи". В любом случае не полный бред :)

Max
29.08.2017
22:13:54
сперва думал так... $balanceProvider->getBalanceForWallet(Wallet $wallet)
тип сервис который будет отдавать баланс
но

sic transit
29.08.2017
22:16:17
Давай пофантазируем: Bounded Context -> Strategy -> Facade

Max
29.08.2017
22:17:14
этот сервис чисто инфраструктура и как бы он описывает все то поведение, что есть у сущности wallet, но реализация на другой стороне
$wallet->balance(); $wallet->addBonus($bonus); и тд

sic transit
29.08.2017
22:18:07
Не могу с долларами читать, страдаю
Богатый язык

Max
29.08.2017
22:18:37
Wallet wallet = ...
Balance bal = wallet.balance();
wallet.addBonus(new SomeBonus());
ну ты понял)

sic transit
29.08.2017
22:21:10
я специально встал пораньше, чтобы успеть,а тут телега :)

Max
29.08.2017
22:22:14
если заюзать стратегию то в ушерб инкапсуляции

Google

Max
29.08.2017
22:22:47
но я особо не вижу как ее тут можно прикрутить...
А вообще получается, что мне нужно дергать сущность из другого контекста
только вот контекст это отдельный сервис
у меня есть еще идея...wallet делать как proxy


Игорь
30.08.2017
19:15:11
Ребят, привет.
Перечитывал про IoС и DI и понял что я ничего не понимаю и совсем запутался. Может кто распутает мои мысли.
В общем раньше я был такого мнения:
Inversion of Control (инверсия управления) — это некий абстрактный принцип, набор рекомендаций для написания слабо связанного кода. Суть которого в том, что каждый компонент системы должен быть как можно более изолированным от других, не полагаясь в своей работе на детали конкретной реализации других компонентов.
Dependency Injection (внедрение зависимостей) — это одна из реализаций этого принципа (помимо этого есть еще Factory Method, Service Locator). (Взято с хабра https://habrahabr.ru/post/131993/)
Но затем я нашел такую статью http://sergeyteplyakov.blogspot.ru/2014/11/di-vs-dip-vs-ioc.html в которой говорится что:
Инверсия управления (IoC) говорит об изменении потока исполнения, присуща фреймворкам и функциям обратного вызова и не имеет никакого отношения к управлению зависимостями. Передача зависимостей (DI) - это инструмент передачи классу его зависимости через конструктор, метод или свойство.
И здесь я и запутался, на фразе что IoC не имеет никакого отношения к управлению зависимостями. Так всетаки как DI относится к IoC? или они не имеют отношения друг к другу? типа DI это инструмент предоставления зависимостей, а IoC это коллбеки, делегаты и т.д. в общем все что позволяет фреймворкам управлять нашим кодом?


Evgeniy
30.08.2017
19:44:44
Ребят, привет.
Перечитывал про IoС и DI и понял что я ничего не понимаю и совсем запутался. Может кто распутает мои мысли.
В общем раньше я был такого мнения:
Inversion of Control (инверсия управления) — это некий абстрактный принцип, набор рекомендаций для написания слабо связанного кода. Суть которого в том, что каждый компонент системы должен быть как можно более изолированным от других, не полагаясь в своей работе на детали конкретной реализации других компонентов.
Dependency Injection (внедрение зависимостей) — это одна из реализаций этого принципа (помимо этого есть еще Factory Method, Service Locator). (Взято с хабра https://habrahabr.ru/post/131993/)
Но затем я нашел такую статью http://sergeyteplyakov.blogspot.ru/2014/11/di-vs-dip-vs-ioc.html в которой говорится что:
Инверсия управления (IoC) говорит об изменении потока исполнения, присуща фреймворкам и функциям обратного вызова и не имеет никакого отношения к управлению зависимостями. Передача зависимостей (DI) - это инструмент передачи классу его зависимости через конструктор, метод или свойство.
И здесь я и запутался, на фразе что IoC не имеет никакого отношения к управлению зависимостями. Так всетаки как DI относится к IoC? или они не имеют отношения друг к другу? типа DI это инструмент предоставления зависимостей, а IoC это коллбеки, делегаты и т.д. в общем все что позволяет фреймворкам управлять нашим кодом?
То что ты считал вначале как ioc называется dic
Dip
Dependency injection principe
Вторач трактовка ioc норм
Di правильно это инструмент
Игорь ты случаем меня не знаешь??


Игорь
30.08.2017
19:47:40

da horsie
30.08.2017
19:47:52

Игорь
30.08.2017
19:48:02

Evgeniy
30.08.2017
19:48:24

da horsie
30.08.2017
19:49:01

Evgeniy
30.08.2017
19:49:34
Нихт фирштейн ?

Игорь
30.08.2017
19:49:43

da horsie
30.08.2017
19:50:18
Dependency INJECTION - это технология, Dependency INVERSION - это общий принцип

Google

Артур Евгеньевич
30.08.2017
19:50:30
Я кстати начинал статью писать про все эти аббревиатуры даже план набросал но потом как всегда:(

Evgeniy
30.08.2017
19:50:46

Игорь
30.08.2017
19:51:02

Evgeniy
30.08.2017
19:51:09
лан забей)

da horsie
30.08.2017
19:51:51
И в чем заключается этот принцип?
A. High-level modules should not depend on low-level modules. Both should depend on abstractions.
B. Abstractions should not depend on details. Details should depend on abstractions.
https://en.wikipedia.org/wiki/Dependency_inversion_principle

Evgeniy
30.08.2017
19:52:19
гуглится это легко

Игорь
30.08.2017
19:52:56

Evgeniy
30.08.2017
19:53:21
http://lmgtfy.com/?q=di+vs+dip

da horsie
30.08.2017
19:53:31
Dep INJECTION - это общее название механизма автоматического разрешения/внедрения зависимостей. e.g. Spring Framework in Java, Symfony DI and Pimple in PHP

Evgeniy
30.08.2017
19:54:21
ты что то скучный коняш к словам придераешься0
радуги, единороги, говнокод. тесты)

Артур Евгеньевич
30.08.2017
19:55:13

da horsie
30.08.2017
19:55:41

Игорь
30.08.2017
19:56:02
В общем получается что ioc и di это разные вещи и вторая статья как раз является верной

Anton
30.08.2017
19:56:13
вторая входит в иос
как одна из возможных реализаций

da horsie
30.08.2017
19:56:45

Anton
30.08.2017
19:56:46
наряду с фактори например

Evgeniy
30.08.2017
19:57:02

Артур Евгеньевич
30.08.2017
19:57:04

Google

da horsie
30.08.2017
19:57:22

Evgeniy
30.08.2017
19:57:36
ух предвкушаю срач

Anton
30.08.2017
19:57:51
с чего не реализаций. иос это принцип того что зависимости кто то предоставляет это можно сделать несколькими способами

Артур Евгеньевич
30.08.2017
19:57:58

Anton
30.08.2017
19:58:30
я думаю это скорее будет реализация иос
а не ди

Артур Евгеньевич
30.08.2017
19:58:52
Все таки под словом реализация я бы понимал конкретный код

Anton
30.08.2017
19:59:18
я бы понимал один из возможных способов сделать что то. иос - интерфейс, ди - имплементейшн

da horsie
30.08.2017
19:59:31