@prophp7

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

Denys
19.03.2018
11:59:32
как выше сказал Сергей, всё зависит от задачи. Если планируется использование исключительно mysql базы, то драйвер mysqli вполне рабочий вариант
я бы предпочел использовать PDO, что бы избавится от головной боли в будущем) если конечно это не сайт визитка)

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
как-то так я тебе отвечу на сервисы BookFiller
Ну это пример же. Так ты мне уже отвечал на подобный пример. Пусть будет BookShelfCreatorService, суть вопроса не поменялась.

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

Sergey
19.03.2018
12:05:12
Ну это пример же. Так ты мне уже отвечал на подобный пример. Пусть будет BookShelfCreatorService, суть вопроса не поменялась.
с такими сервисами тоже смотри ту картинку. Ну либо опиши чем занимается BookShelfCreatorService

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

Vitaly
19.03.2018
12:06:10
с такими сервисами тоже смотри ту картинку. Ну либо опиши чем занимается BookShelfCreatorService
По запросу создает "полку" из переданного ему списка книг.

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

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

Vitaly
19.03.2018
12:09:59
а кто будет делегировать этому сервису создание полки?
Что ты имеешь в виду? Кто будет дергать его метод createBookshelfFromBooksList?

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 какой-нибудь?

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

ну именно cancelAllExpired

Sergey
19.03.2018
12:19:50
ну именно cancelAllExpired
да, это у оунера твоих тикетов надо)

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
ммм.... еще раз - опиши юзкейс. что есть, что должно быть и нахера тебе репозиторий?
Репозиторий мне тут, что бы метод сервиса cancelAllExpired выбрал бы из БД нужные сущности Ticket

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

или речь идет о каких-то batch операциях?

Vitaly
19.03.2018
12:23:03
у Ticket есть владелец?
Предположим, что нет. Но он связан с другими сущностями.

Sergey
19.03.2018
12:23:20
Предположим, что нет. Но он связан с другими сущностями.
если нет - то мы можем говорить только о batch операции

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
Нет, использую sqlite
то есть мы говорим о интеграционных тестах нежели юнитах

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

Vitaly
19.03.2018
12:27:04
то есть мы говорим о интеграционных тестах нежели юнитах
Нет, это больше юнит тесты, просто решили не мокать репы.

Sergey
19.03.2018
12:27:41
Нет, это больше юнит тесты, просто решили не мокать репы.
больше, меньше..... если юнит в тесте не один, если все зависимости не подменены на какие-то заглушки/моки - то это не юнит тест.

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

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:20:07
Sergey
19.03.2018
15:20:41
Антон
19.03.2018
15:20:47
да пздц, устроился на работу. тут такой лапшекод в некоторых местах

поплакал, теперь думаю как переделать

Sergey
19.03.2018
15:21:59
хм ... а как его тут применять?)
ну еще можно options resolver симфоневый для того что бы красиво захэндлить улицу но в целом можно и просто array_replace

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