
Артур Евгеньевич
20.07.2017
20:58:31
парни можете объяснить вот это утверждение
"Обилие же композиции говорит о нарушении Принципа Инверсии Зависимостей, сформулированном Бобом Мартином, которую сейчас можно выразить в терминах агрегации и композиции: предпочитайте агрегацию вместо композиции, поскольку первая стимулирует использование абстракций, а не конкретных классов."

Evgeniy
20.07.2017
20:59:11
ну в целом да
разницу между агрегацией и композицией знаешь?)

Google

Артур Евгеньевич
20.07.2017
20:59:40
да знаю

Evgeniy
20.07.2017
20:59:54
плюс агрегации что объект приходит извне
и соответственно может быть подменен если у тебя там solid
и принцип лисков
соблюдается
получается используя агрегацию код более присболен к внедрению зависимостей
и соответственно инверсии зависимостей

Артур Евгеньевич
20.07.2017
21:01:12
хм ну да выходит так

Evgeniy
20.07.2017
21:02:08
ну ты про фабрику правильно написал
вон в ларавел вместо фабрик фасады
а внутри фасадов di
просто лазить по приложению и править фабрики это то еще занятие
и на лету их сложно менять

Google

Артур Евгеньевич
20.07.2017
21:03:08
ну да вот я поэтому и удалил сообщений)

da horsie
20.07.2017
21:08:13

Артур Евгеньевич
20.07.2017
21:08:29

da horsie
20.07.2017
21:08:44
конфигурация DI распухает, ее становится сложно поддерживать
совсем упарываться DI тоже не стоит

Артур Евгеньевич
20.07.2017
21:09:31
мне нужно было создать контроллер который имеет один роут который возвращает значения справочника. Так я его зареги как сервис, и еще создал сервис фабрику репозиториев с определенным параметром, которая дает ему репозиторий нужной сущности??
такие правила)

da horsie
20.07.2017
21:09:50
ну вот да
это уже наркомания какая-то

Артур Евгеньевич
20.07.2017
21:10:38
а вообще что вы понимаете под словом сервис? имею ввид не приложение а именно сервис как класс

Evgeniy
20.07.2017
21:10:52
state less
imutable

Артур Евгеньевич
20.07.2017
21:11:38
то есть по сути то что можно заменить статическим классом?)

Evgeniy
20.07.2017
21:11:56
ну надо пихать зависимости туда будет
например А использует сервис С
С зависит от Б
если ты заменишь С на статический класс
то А будет зависеть от Б
если тебя такое устрайвает то заменяй)

Артур Евгеньевич
20.07.2017
21:12:55
С зависит от Б
вот важный момент, помоему сейчас слово сервис эквивалентно слову зависимость

Google

Evgeniy
20.07.2017
21:13:10
ну весь код это один комок зависимостей
и параметры к базе данных это тоже зависимости

Артур Евгеньевич
20.07.2017
21:13:22
по сути сервис - набор функций, который можно заинджектить

Evgeniy
20.07.2017
21:13:59
если говорить фпшным языком то это частичное карирование функций
есть чистая функция
есть на основе неё частично карированные функции
но это фп
и тут я не силен
как и в ооп
я силен в КОП (Костыльно ориентированном программирование)

da horsie
20.07.2017
21:15:06
частично каррированная - это как?) половина переменной передана? )
полтора землекопа?

Evgeniy
20.07.2017
21:16:12
add(a, b) { return a + b; }
addFive(a) {return add(5, a);}
грубо говоря вот это карирование, но в фп есть свои штуки

da horsie
20.07.2017
21:16:28
это каррирование

Evgeniy
20.07.2017
21:16:28
синтаксис и тд
частичное

da horsie
20.07.2017
21:16:42
что значит частичное?

Evgeniy
20.07.2017
21:16:50
в книге вычитал
частичное применение вроде

Google

da horsie
20.07.2017
21:17:27
может ты путаешь с partial application?
вот да

Evgeniy
20.07.2017
21:18:21
я в голове понимаю как это а все эти термины не запоминаю)

Admin
ERROR: S client not available

Ivan
21.07.2017
09:12:37
Есть интерфейс SshClient с одним методом выполнения удалённой команды execute($cmd) и дефолтная реализация DefaultSshClient с опциями подулючения в конструкторе.
Для логгирования выполняемых команд сделал декоратор LoggingSshClient.
Есть проблемы с DNS resolution при запросах, добавил ещё один декоратор DnsFailureSafeSshClient.
Теперь понадобилось конфигурировать для всех SshClient путь к бинарнику ssh в одном месте, сделал DefaultSshClientFactory с путём в конструкторе.
Вот теперь для остальных SshClient мне тоже фабрики делать?
много классов получается, может как-то попроще можно?

Sergei
21.07.2017
09:19:35


Ivan
21.07.2017
09:21:13
я хочу переиспользовать его, но с разными опциями соединения, которые берутся из бд, не из конфига
сейчас $factory->createClient($options)->execute($command);
в разных местах мне нужно логгировать запросы
или проблема с днсами тоже не везде
то есть $factory в разных местах разная
а вот конфигурирование где какая фабрика идёт через DIC
то есть в разных местах мне нужно указать, какой набор декораторов использовать
не знаю, правильно ли так, но сделал декорацию фабрик
https://gist.github.com/Romashka/a758a85462e29d0a0d372f43ceef9df2

da horsie
21.07.2017
14:18:49

Sergei
21.07.2017
19:55:12

Aliaksandr
21.07.2017
19:57:42

.avolver
21.07.2017
19:58:22
https://www.amazon.com/Elegant-Objects-1-Yegor-Bugayenko/dp/1519166915

Google

da horsie
21.07.2017
19:59:32

Evgeniy
21.07.2017
20:01:33
Logging implements ExecutorInterface ну и FallbackChain implements DnsResolverInterface
нет окончаний на or и er
эксперт по костылям
http://cs4.pikabu.ru/post_img/2016/08/01/7/147004996416599702.jpg

Sergei
21.07.2017
20:04:01

da horsie
21.07.2017
20:05:46
есть еще хороший принцип включать голову, когда следуешь принципам

Evgeniy
21.07.2017
20:06:10
а еще лучше не выключать голову))
хотя мб только в армии стоит выключить, а в остальных случаях держать включенной

da horsie
21.07.2017
20:07:35

Sergei
21.07.2017
20:12:46
DnsResolverInterface к примеру это часть поведения которая должна быть в классе Dns