@oop_ru

Страница 38 из 785
Sergey
23.12.2016
21:37:56
You can't have code coverage серьезно?

I can't use a data provider

:O

Sergey
23.12.2016
21:38:16
из коробки - не сможешь, но можно поставить экстеншен

Google
Sergey
23.12.2016
21:38:21
дата провайдеров тоже нет

Sergey
23.12.2016
21:38:27
I can't mock abstract methods - а интерфейсы можешь?

Sergey
23.12.2016
21:38:28
НО

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

Sergey
23.12.2016
21:38:47
а несколько интерфейсов одновременно?)

Sergey
23.12.2016
21:38:53
а несколько интерфейсов одновременно?)
а тебе надо несколько интерфейсов одновременно?)

Sergey
23.12.2016
21:39:15
да, были такие кейсы

Sergey
23.12.2016
21:39:15
на одной зависимости

да, были такие кейсы
а ты считаешь что это нормально?)

Sergey
23.12.2016
21:39:44
а почему нет?)

Sergey
23.12.2016
21:40:01
ну как тебе сказать... как минимум звучит странно

быть может это должен быть не 2 интерфейса а один?

Google
Sergey
23.12.2016
21:40:19
может ты не так разделил интерфейсы?

может твой класс делает что-то слишком много?

Sergey
23.12.2016
21:40:54
не, именно 2 надо было, один как маркер вроде был

щас по коду поищу где это было

Sergey
23.12.2016
21:41:23
не, именно 2 надо было, один как маркер вроде был
если это два разных объекта (пусть один и тот же просто две зависимости) то норм, но тут тебе phpspec норм

иначе что-то не так с сегрегацией интерфейсов

Sergey
23.12.2016
21:43:58
а да вот нашел. там коллекция, в нее добавляются элементы интерфейса Filter, но у некоторых элементов может быть еще интерфейс StatefulFilter и вот надо было проверить метод который делает getStatefulFilters

Sergey
23.12.2016
21:44:27
да

Sergey
23.12.2016
21:44:36
ну... чувствуешь запашек легкий?

Sergey
23.12.2016
21:44:56
та не, норм

Sergey
23.12.2016
21:45:14
ну это не вонь, это так... как если ты открываешь холодильник и тебе не комфортно

Sergey
23.12.2016
21:45:25
ок, твой вариант)

Sergey
23.12.2016
21:45:42
я ж задачу не знаю)

чем отличается поведение StetefulFilter от Filter и что ты делаешь внутри коллекции?

Sergey
23.12.2016
21:46:10
class Filters { /** * @var FilterInterface[] */ private $filters = []; /** * @return FilterInterface[] */ public function getFilters() { return $this->filters; } /** * @param FilterInterface $filter */ public function addFilter(FilterInterface $filter) { $this->filters[get_class($filter)] = $filter; } /** * @param string[] $names * @return FilterInterface[] */ public function getFiltersExcept(...$names) { $filters = $this->filters; foreach ($names as $name) { if (!isset($filters[$name])) { continue; } unset($filters[$name]); } return $filters; } /** * @param $name * @return FilterInterface */ public function getFilter($name) { return $this->filters[$name]; } /** * @return StatefulFilterInterface[] */ public function getStatefulFilters() { $filters = []; foreach ($this->filters as $key => $filter) { if ($filter instanceof StatefulFilterInterface) { $filters[$key] = $filter; } } return $filters; } }

вообще можно было сделать расширение интерфейса, но это слишком просто

Sergey
23.12.2016
21:47:03
getStatefulFilters

только там вижу inscenceof

и не понимаю зачем этот метод

Google
Sergey
23.12.2016
21:47:29
ну вот надо)

Sergey
23.12.2016
21:47:36
ну вот запах

короч... пишка ограничений спека в том что отговорки в духе "ну вот надо" там не сработают. Ты тупо не сможешь это протестить и тебе придется подумать получше

а поскольку мы со спеком должны работать в контексте tdd

то проблемы быстрее находятся

Sergey
23.12.2016
21:49:05
вот где он юзается public function createSearchRequest($searchParams) { $searchRequest = new SearchRequest(); $searchRequest->setSearchParams($searchParams); foreach ($this->filtersProvider->getStatefulFilters() as $filter) { $searchRequest->addFilterContext(get_class($filter), $filter->createContext($searchRequest)); } return $searchRequest; }

Sergey
23.12.2016
21:49:25
так почему бы тебе для stateful фильтров не завести тупо отдельную коллекцию?

Sergey
23.12.2016
21:49:31
зачем?)

Sergey
23.12.2016
21:49:37
избавился бы от ифов

ну это ж разные интерфейсы

и разные штуки

если бы у тебя были дженерики

то тебе нужно было бы что-то в духе

Filters<Filter|StatefulFilter>

Sergey
23.12.2016
21:50:55
не. просто StatefulFilter не может сам существовать

только как маркер для Filter

поэтому List<Filter>

Sergey
23.12.2016
21:51:16
...хз стремная хрень

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

Sergey
23.12.2016
21:51:55
если это стремная хрень, зачем ее добавляют в core lib котлина?

Google
Sergey
23.12.2016
21:51:55
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter-is-instance.html

filters.filterIsInstance<StatefulFilter>() вот так бы этот метод выглядел

Sergey
23.12.2016
21:52:59
нуууу... хз)

компромисы?)

Sergey
23.12.2016
21:53:39
? да нет, у меня подобные кейсы есть еще в других местах

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

точнее там не маркеры, а полноценные интерфейсы

guga
23.12.2016
21:55:07
Про котлин был кстати годный доклад, о том, что любой язык — сполшные компромисы, ну и примеры компромисов, которые они приняли.

Sergey
23.12.2016
21:55:18
на спринге это проще... захуярил себе List<OloloInterface> services и не ебешь себе мозг

guga
23.12.2016
21:55:18
Все, кроме хаскеля, он прекрасен.

Sergey
23.12.2016
21:55:41
котлин практичен)

Sergey
23.12.2016
21:55:50
практичность = компромисы

это как инженеры vs ученые

Sergey
23.12.2016
21:56:09
ну экстеншены мало кто назовет здравой идеей

Sergey
23.12.2016
21:56:12
инженеры используют допущения, неточности, рандом

Sergey
23.12.2016
21:56:51
ну как рандом.. скорее реальные условия

а не лабораторные или какие-то теории

guga
23.12.2016
21:57:10
Sergey
23.12.2016
21:57:14
да

guga
23.12.2016
21:57:21
я считаю что это прекрасно

Google
Sergey
23.12.2016
21:57:29
если не злоупотреблять

а то код быстро превращается в непонятные вещи)

guga
23.12.2016
21:57:47
нодоело писать StringUtils, BlaBlaUtils

а выглядят они лучше, чем теже имлиситы в скале

Sergey
23.12.2016
21:58:42
я вот сегодня запилил себе fun Document.createElement(name: String, value: String = "", attributes: Map<String, String> = emptyMap()): Node { val element = this.createElement(name) element.textContent = value for ((attrName, attrValue) in attributes) { element.setAttribute(attrName, attrValue) } return element }

и теперь можно хреначить appendChild(createElement("RelCode", attributes = mapOf("value" to "Regular")))

вместо унылых записей в 3 строки

val relCode = doc.createElement("RelCode") relCode.setAttribute("value", "Regular") requestItem.appendChild(relCode)

guga
23.12.2016
22:01:38
а вот на оборот хочу как-то производную spec попробовать

Sergey
23.12.2016
22:01:51
зачем?)

spock какой-то?

guga
23.12.2016
22:02:07
не знаю, spoсk выглядит довольно вкусно

Sergey
23.12.2016
22:02:59
его ж вроде с груви только юзают?

guga
23.12.2016
22:03:32
Нет, судя по тому что я видел, вполне удачно тестируют java код

Sergey
23.12.2016
22:03:49
https://github.com/JetBrains/spek/blob/master/spek-samples/src/test/kotlin/org/jetbrains/spek/samples/CalculatorSpec.kt

можно spek взять еще)

Sergey
23.12.2016
23:52:01
https://www.youtube.com/watch?v=ZsHMHukIlJY

оч годный видос

можно собрать список видосов которые говорят "не юзайте геттеры и сеттеры")

da horsie
24.12.2016
00:03:55
массивы в php в качестве DTO - это ок?

Sergey
24.12.2016
00:04:15
массивы в php в качестве DTO - это ок?
ну ты теряешь контроль над типами... а так ок

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