@prophp7

Страница 662 из 1387
Alexander
06.10.2017
07:06:27
https://gist.github.com/anonymous/6b8e860ed5a1543b90a12d09e2ea84e7 как вариант. Но вообще возникает вопрос — а почему не интерфейс предоставлять разработчикам?
Хочется часть общей логики выполнить в makeSound, а всю конкретику вынести на реализацию пользователям пакета в методе getSound. Соответственно, протестировать нужно именно makeSound. Ну и интерфейс для такой цели не подходит)

da horsie
06.10.2017
07:09:51
Еще раз повторюсь: юзаю эту либу https://github.com/mockery/mockery
phpunit умеет делать моки из абстрактных классов из коробки

Andrew
06.10.2017
07:10:06
Хочется часть общей логики выполнить в makeSound, а всю конкретику вынести на реализацию пользователям пакета в методе getSound. Соответственно, протестировать нужно именно makeSound. Ну и интерфейс для такой цели не подходит)
если честно, вызывает опасение такой подход по простой причине — пользователи будут иметь возможность переопределять общую логику. Я бы все-таки подумал над composition over inheritence. Пример сейчас попробую накидать

Google
Roman
06.10.2017
07:10:40
phpunit умеет делать моки из абстрактных классов из коробки
Я знаю. Мне просто удобнее с Мокери работать, вот с ним пример и привел

da horsie
06.10.2017
07:14:25
https://gist.github.com/anonymous/b832684c2c0e7d1bb65e9cdc84aaffb0
+ а все готовые инстансы ThroatInterface, которые идут в комплекте можно сделать final чтобы не поломали

Roman
06.10.2017
07:16:05
Часто ли вы юзаете final для классов?

da horsie
06.10.2017
07:16:23
https://www.youtube.com/watch?v=8d2AtAGJPno

в тему

про final там тоже есть

Roman
06.10.2017
07:16:45
в тему
Да, смотрел, но давненько. Пересмотрим, дякую)

Evgeniy
06.10.2017
07:17:05
о я через один стрим хотел про final рассказать

чтобы по умолчанию юзали люди)

Andrew
06.10.2017
07:17:18
я стараюсь всегда. Очень помогает

Google
Evgeniy
06.10.2017
07:17:22
и что как наследованием все переломать)

Alexander
06.10.2017
07:17:36
если честно, вызывает опасение такой подход по простой причине — пользователи будут иметь возможность переопределять общую логику. Я бы все-таки подумал над composition over inheritence. Пример сейчас попробую накидать
сначала я думал, что сохранить возможность переопределять общую логику - хорошая идея, но увидев ваш пример с ThroatInterface, понял, что был не прав)

da horsie
06.10.2017
07:17:36
чтобы по умолчанию юзали люди)
cделаем из пыха котлин

Evgeniy
06.10.2017
07:17:43
ну правило простое класс final до тех пор пока не потребовалось наследование)

если класс final значит protected не надо уже)

соответственно все private кроме методов метода или того что непосредственно юзается

это мой личный лайфхак

da horsie
06.10.2017
07:18:37
Evgeniy
06.10.2017
07:19:02
в пхп вместо наследования можно юзать трейты

da horsie
06.10.2017
07:19:05
наследование != иерархии

Evgeniy
06.10.2017
07:19:24
это копипаста

по сути ты от зависимости объектов

делаешь копипасту

Andrew
06.10.2017
07:19:40
ну трейты — вообще копипаст на уровне языка, я бы к ООП не относил это

Evgeniy
06.10.2017
07:19:44
полиморфизма на трейтах нет

da horsie
06.10.2017
07:19:53
трейты это tight coupling

Google
da horsie
06.10.2017
07:19:59
нунахер

Evgeniy
06.10.2017
07:20:09
вот хотите пример наследования?)

и как его решить без наследования, кто нибудь сможет )

Aleh
06.10.2017
07:20:42
Давай

Roman
06.10.2017
07:20:42
полиморфизма на трейтах нет
Я думаю для внутренних либ можно их юзать, но если проект большой, то проще дублирующийся код в новый класс вынести.

Evgeniy
06.10.2017
07:21:08
вот например fw slim3

у любого современного фреймворка внутри ContainerInterface

slim юзает pimple (мне он не очень нравиться)

есть другая библиотека реализуюзая ContainerInterface

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

соответственно любой ContainerInterface можно считать провайдером с помощью адаптера

тут пока все логично и живется без наследование

но в чем особенность, что либа может состоять из нескольких провайдеров и часть параметров в одном провайдере

часть в другом

Aleh
06.10.2017
07:24:33
Так себе ты ситуацию описал)

Evgeniy
06.10.2017
07:24:46
ну это одна из последних что я делал)

я ее решил следующим образом сейчас кину )

довольно костыльно конечно

Google
Roman
06.10.2017
07:25:45
хы

Evgeniy
06.10.2017
07:26:34
https://pastebin.com/Z1rtK60L

теперь соотвественно пример как это юзаю https://pastebin.com/bFbvDW5j

и как решить проблему без наследования хз, делать так чтобы каждый провайдер знал о основно контейнере тоже странно, вот и думаю)

но таким способом я смог подменить оригинальный контейнер в фреймворке и все работает шикарнои все модули фреймворка и тд работают и я могу легко все расширять)

вот думаю может кто изящней способ подскажет, ps либа для di тут используется моя

Evgeniy
06.10.2017
07:37:21
там так и сделано

и написан провайдер ну или адаптер для этого класса чтобы адаптировать его к провайдеру

но при этом все что в фреймворке сделано и в другом коде, тоже должно работать

da horsie
06.10.2017
07:40:04
там так и сделано
мне кажется тебе надо что-то типа такого https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/HandlerWrapper.php

Evgeniy
06.10.2017
07:41:27
я код вендоров менять не могу и там есть только интерфейс ContainerInterface

da horsie
06.10.2017
07:43:06
ну ты примерно такую штуку и реализовал

Evgeniy
06.10.2017
07:43:12
да

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

хотя есть идейка

основной кейс примерно следующий, в старом ContainerInterface в pimple есть объект А который зависит от Б и С например

зависимости А, Б, С объявленны и все работает

я хочу например параметр Б переопределить, чтобы это сделать мне надо лесть именно в это оригинальный контейнер

Google
da horsie
06.10.2017
07:46:57
если есть интерфейс, то можно без наследования

Evgeniy
06.10.2017
07:47:11
я этот код ночью написал

за стаканом чая буду думать как улучшить, хочу чтобы агрегация была

эх ладно это мои проблемы и наболевшее да и сделал я)

Антон
06.10.2017
07:57:17
Пятница какой чай :(
с утра пьешь за php7.2?

Fayozjon [CybernatiC]
06.10.2017
07:57:31
Уже 13 часов

Обед гашлык машлык

Все дела

А пыха релизнулась это таки хорошо

Антон
06.10.2017
07:57:53
непрограммист чтоли?

кодить до ночи

Evgeniy
06.10.2017
07:58:18
почему до ночи

надо именно ночью до утра

до рассвета

Антон
06.10.2017
07:58:30
еще вроде не релизнулась

днем пить, ночью кодить? =)

Fayozjon [CybernatiC]
06.10.2017
08:02:03
До утра обычно код пишу

До 4-5

Потом засыпаю

Просыпаюсь обычно к 11

Ебашу кофе

Страница 662 из 1387