
Sergey
19.03.2018
11:58:38
как-то так я тебе отвечу на сервисы BookFiller

Denys
19.03.2018
11:59:32

Maksim
19.03.2018
11:59:50
как раз только в сайте-визитке может понадобитьс смена субд)

Denys
19.03.2018
12:00:11
я пока ни разу такого не встречал)

Google

Maksim
19.03.2018
12:00:42
на реальном проекте такое случится +\- никогда) ибо это если и не невозможно, то крайне сложно.
к тому же, так или иначе, но люди с pdo всё равно используют специфичные для конкретной субд операции.

Vitaly
19.03.2018
12:01:34

Denys
19.03.2018
12:02:16

alex
19.03.2018
12:02:54
привет нужная помощь по скрипту и гитхаб апи, кто готов помочь? подробности в личке

Sergey
19.03.2018
12:05:12
в моем понимании для создания book shelf нужна либо другая "сущность" (в общем смысле, какой-то объект, сервис или сущность доктрины не важно)

Vitaly
19.03.2018
12:06:10

Bohdan
19.03.2018
12:09:02
а кто будет делегировать этому сервису создание полки?
и да
это абстрактная полка в вакууме или реальный пример?

Vitaly
19.03.2018
12:09:59

Bohdan
19.03.2018
12:10:49
вроде того
ладно, дабы не повторяться - смотри видос

Google

Bohdan
19.03.2018
12:11:10
https://www.destroyallsoftware.com/talks/boundaries

Vitaly
19.03.2018
12:11:13
Контроллер, например или команда консольная.

Bohdan
19.03.2018
12:12:13
а почему эта логика не может находиться в классе Bookshelf?

Vitaly
19.03.2018
12:13:32

Sergey
19.03.2018
12:15:13
а ну вы уже пришли к консенсусу что этот сервис не очень то и нужен)

Vitaly
19.03.2018
12:17:32
Ок, пример получше, но тоже сферический в вакууме. Сущность Ticket, с методом cancel и свойством cancelation. Сопутствующий сервис TicketCancelationService и методом cancelAllExpired, например. Вопрос. Где предпочтительнее протестировать логику метода cancel, если она сложная. В тестах для сущности TicketTest или в тестах для сервиса?

Bohdan
19.03.2018
12:18:02
cancellation -> cancelled? статус имеешь ввиду?

Vitaly
19.03.2018
12:18:33

Bohdan
19.03.2018
12:18:50
VO какой-нибудь?

Sergey
19.03.2018
12:19:02
у меня вся логика была бы внутри Ticket)
(возможно, если вся логика относится именно к билету)

Bohdan
19.03.2018
12:19:30
а у меня внутри сущности выше Ticket (доска там или что-то вроде)
ну именно cancelAllExpired

Sergey
19.03.2018
12:19:50

Vitaly
19.03.2018
12:20:37

Sergey
19.03.2018
12:21:02

Bohdan
19.03.2018
12:21:27
овнер твоих тикетов - к примеру, доска или проект

Vitaly
19.03.2018
12:21:55

Google

Sergey
19.03.2018
12:22:19
какая-то сущность которая хранит коллекцию тикетов этих
или речь идет о каких-то batch операциях?

Vitaly
19.03.2018
12:23:03

Sergey
19.03.2018
12:23:20

Vitaly
19.03.2018
12:23:34

Sergey
19.03.2018
12:23:41
что в том числе? так есть владелец или нет?)
что это за тикет вообще?
типа канбан борды? суппорт система? продажа билетов?
ну вот захотел ты сервис свой этот потестить - будешь ли ты мокать сущности?

Vitaly
19.03.2018
12:26:09

Sergey
19.03.2018
12:26:21
(ну то есть у тебя не один юнит в изоляции а много юнитов и даже целая база данных)

Vitaly
19.03.2018
12:27:04

Sergey
19.03.2018
12:27:41
следовательно мы можем не сильно заморачиваться на тему того "че где должно быть" потому что эти тесты только для верификации работы, а не инструмент дизайна

Vitaly
19.03.2018
12:28:09

Sergey
19.03.2018
12:29:01
Вот спасибо большое!
я повторюсь, важно что бы мы понимал о чем мы говорим. Интеграционные тесты - это отдельная песня. Там чуть другие принципы и чуть другие загоны.

Google

Sergey
19.03.2018
12:29:53
юниты чувствительны к связанности, к количеству зависимостей. Много зависимостей - юниты становятся хрупкими (как и клиентский код завязанный на эти юниты). И именно это является той причиной почему многие не умеют в юнит тесты. Потому что мало просто тесты научиться писать
интеграционные же тесты больше чувствительны к фикстурам, а на качества кода им пофигу

Vitaly
19.03.2018
12:30:10
Короч, ребята в команде пишут тесты, называют их юнит-тестами, но выглядят они, как интеграционные. Когда у меня возникла необходимость протестировать новое поведение доменной сущности, я тупо не нашел на неё тестов, потому, что все её поведение тестируется через сервисы.

Sergey
19.03.2018
12:31:33
тем более что эта же валидация так или иначе задевается интеграционными тестами
короч в этом ключе следует делать так как тебе удобнее и все. Много юнитов с такой декомпозицией не написать, пирамида тестов уже не ок
p.s. я думаю эта пирамида перевернута у 90% людей, но лучше хоть какие-то тесты

Vitaly
19.03.2018
12:36:16
Спасибо, обсудим с командой.

Sergey
19.03.2018
12:36:42
https://vimeo.com/80533536

Admin
ERROR: S client not available

Sergey
19.03.2018
12:36:46
можешь с ними посмотреть обсудить)
и да - "по другому" сложно, оч сложно, надо много думать и разбираться, а еще - бороться с привычками и стериотипами (в основном по этой причине)
потому.... может не понравиться)

F01134H
19.03.2018
14:00:45
Есть для пхп какая-нибудь штука для определения (boot) темплейтов сообщений в rabbit mq? Проще говоря какой то спецификатор жсон структуры

Panda
19.03.2018
14:46:22
подскажите пожалуйста, есть xlsx файл, в котором есть колонки с десятичными числами, разделенными запятой. как можно сохранить такой файл в csv, поставив разделитель колонок например ;

Serge
19.03.2018
14:56:13
Что правильнее? Выносить время жизни в константу(при том что юзаться будет 1 раз в репозитории) или хардкодить числом?
$qb
->getQuery()
->useResultCache(
true,
self::PAYOUT_STATISTIC_TTL)
или
$qb
->getQuery()
->useResultCache(
true,
3600)
а то у меня ту мини холливар с коллегой

f4rt~
19.03.2018
14:56:39
константа,имхо
изменил один раз, изменилось во всех местах
а не полез править везде, где оно юзалось в каких репозиториях/сервисах/менеджерах и тп

Google

Serge
19.03.2018
14:57:44
это да, если юзается не раз

f4rt~
19.03.2018
14:58:21
ты не знаешь сколько раз и где оно будет юзаться, а использовав константу для такого, заранее предусматриваешь определенные кейсы

Vitaly
19.03.2018
14:58:26

Alexandr
19.03.2018
14:58:32
даже если раз - проще читать/понять шо это за хрень

Serge
19.03.2018
14:58:42
тенкую

f4rt~
19.03.2018
14:58:45
плюс когда это обычное чисто не понятно единицу измерения

Bohdan
19.03.2018
14:59:13
плюсую за имя - магические числа в коде есть зло

f4rt~
19.03.2018
14:59:47
открываешь такой легаси код а там идет выражение и в конце него 54

Bohdan
19.03.2018
14:59:55
ненене

f4rt~
19.03.2018
14:59:55
и сиди гадай, почему 54, что это значит откуда оно и тп

Bohdan
19.03.2018
14:59:56
42

f4rt~
19.03.2018
15:00:00
ну да, 42

Антон
19.03.2018
15:18:48
https://paste.laravel.io/df73af1f-23e0-4f06-97f4-4cb39be71a6c
как такую лапшу бы переделать? есть какие то практики, или паттерны?

Sergey
19.03.2018
15:19:38

Anton
19.03.2018
15:19:46

Sergey
19.03.2018
15:20:07

Alexandr
19.03.2018
15:20:09

Sergey
19.03.2018
15:20:41

Антон
19.03.2018
15:20:47
да пздц, устроился на работу. тут такой лапшекод в некоторых местах
поплакал, теперь думаю как переделать

Sergey
19.03.2018
15:21:59