
Sergey
17.12.2017
19:14:44
можешь тоже набросить чего)

Константин
17.12.2017
19:15:47
чуть позже прочту, я тут что-то отупел резко сижу)
кстати думаю воспользоваться твоим советом, и в своих проектах перейти на публичные свойства вместо геттеров и сеттеров

Егор
17.12.2017
19:22:12

Google

Константин
17.12.2017
19:23:03
Но пока только думаю)

Sergey
17.12.2017
19:23:14
хз... как-то так сложилось)
это просто пример

Егор
17.12.2017
19:24:29
А чем графы рисовал?

Sergey
17.12.2017
19:24:31
Notifications - этот можно спокойно переименовать в единственное число и тогда в передах модуля все будет консистентно. Но называть модуль управления заказа Order я не хочу
можно было бы назвать OrderManagment но длинно.
или что-то более приближенное к домену

Егор
17.12.2017
19:25:25
А есть ли инструменты, которые по коду такое сгенерят? В PHPStorm генерируются только связи наследования

Sergey
17.12.2017
19:25:38
но там тебе придется потратить немало времени что бы удобно читаемый граф получить по твоему проекту
хотя это можно руку набить)

Google

Константин
17.12.2017
19:26:09
@fes0r у меня ощущение, что я как то не так использую генераторы. https://github.com/astra50/astra50.ru/pull/19/files#diff-4da5d77fff040fdbc1c6d6c4fffc6e99R58
Есть что сказать?)

Sergey
17.12.2017
19:27:10
тебе типа надо смерджить два генератора?
ну мол один из одного, один из второго и только потому к следующему

Егор
17.12.2017
19:27:23

Sergey
17.12.2017
19:27:37
в phpmetrics можешь дергать)
но не рисовать

Константин
17.12.2017
19:27:55
Меня парят вызовы current() и next()

Sergey
17.12.2017
19:29:50
ну то есть... я бы больше парился что у тебя такой обход по коллекциями интересный
а так в целом конкретно для задачи - почему бы и нет

Константин
17.12.2017
19:31:12

Sergey
17.12.2017
19:34:40
foreach ($this->reportTypeAndFinancing() as [$reportType, $financing]) {
// code
}
я бы так сделал)
или я не правильно задачу понял?
ну мол...
у тебя есть N репорт тайпов и M финансингов и надо получить N*M репортов?
foreach ($reportTypes as $type) {
foreach ($financings as $financing) {
yield [$type, $financing];
}
}
типа

Google

Sergey
17.12.2017
19:36:49
меня смущают твои бесконечные циклы
мой вариант - более явный но возможно тебе другое что-то надо в плане поведения

Константин
17.12.2017
19:37:58
У меня такой логики нет, они просто друг за другом генерятся.
То есть по мне должно быть что-то простое типа $report->setType($this->generateType());
А тут на 3 строки кода разложено

Sergey
17.12.2017
19:38:35
так ты скажи, у тебя будет min(N, M) репортов или N*M?

Константин
17.12.2017
19:38:57
Такой задачи не было

Sergey
17.12.2017
19:39:23
понял, тебе просто надо сгенерить 30 репортов

Константин
17.12.2017
19:39:43
угу

Sergey
17.12.2017
19:41:17
непонятно зачем тебе ++$index; если ты можешь в фориче ключик взять
или еще я часто делаю
foreach (range(0, self::REPORT_NUMBER) as $i) {
$report = $this->generateReport();
$em->persist($report);
}
$em->flush();
а для типов репорта я бы тупо делал array_rand

Константин
17.12.2017
19:43:09
Я про ключ в foreach не подумал, никогда не брал ключ если там возвращается генератор)

Sergey
17.12.2017
19:43:14
генераторы тут как по мне излишнее усложнение - ими я бы только репорт возвращал уже готовый

Константин
17.12.2017
19:43:35
Ну я об этом и говорю

Sergey
17.12.2017
19:45:15
$reportTypes = ReportType::all();
$finanings = Financing::all();
while(true) {
$report
->setType($reportTypes[array_rand($reportTypes)])
->setFinancing($finanings[array_rand($finanings)])
yield $report;
}
ну и в купе с foreach + range вместо while + break - будет проще восприниматься

Константин
17.12.2017
19:46:38
ну while(true) внутри генератора же

Sergey
17.12.2017
19:46:51
ну не "генератора" а функции которая генератор возвращает

Константин
17.12.2017
19:47:03
а, я понял о чём ты

Google

Sergey
17.12.2017
19:47:04
https://github.com/acelaya/doctrine-enum-type
вот еще прикольная штука
а ну тебе такое не особо канает
почему все так любят трейтами обмазываться?
trait Identity

Константин
17.12.2017
19:48:27
Надо к своей уже доку написать, всё лень

Sergey
17.12.2017
19:48:39
trait UpdatedAt - ух

Константин
17.12.2017
19:48:42
Ответ в описании что такое трейты)

Sergey
17.12.2017
19:48:53

Admin
ERROR: S client not available

Константин
17.12.2017
19:49:00
wat?

Sergey
17.12.2017
19:49:03
у тебя же тут нет дублирования
если у тебя есть 2 класса, каждый из которых имеет по 2 одинаковых приватных поля, это не значит что у нас дублирование.
а может быть тебе понадобится updatedAt в другой сущности по другому обозвать? скорее всего ты просто заюзаешь трейт и даже не будешь об этом думать

Константин
17.12.2017
19:50:21
Не значит, но такие общие вещи как id, createdAt мне нравится прятать в тейрты, чтобы при чтении сущности видеть только те поля ради которых она была создана

Sergey
17.12.2017
19:50:29
wat?
так же как goto заставляют тебя "прыгать" по flow of control, трейты заставляют тебя прыгать по зависимостям (файлам)

Константин
17.12.2017
19:51:41
Прятать в folding каждый раз при открытии файла ещё более не удобно чем лицезреть лишнее

Sergey
17.12.2017
19:54:27
если ты знаком со штормовским //<editor-fold

Google

Константин
17.12.2017
19:55:09
не знаком

Sergey
17.12.2017
19:55:54
//<editor-fold defaultstate="collapsed" description="id, timestamps and stuff...">
private $id;
private $createdAt;
private $updatedAt;
//</editor-fold>
и каждый раз когда ты будешь открывать файлик в шторме

Константин
17.12.2017
19:58:05
Это куда писать?
Вот я дичь родил
private function generateReportType(): Closure
{
/** @var Generator $generator */
$generator = \call_user_func(function () {
while (true) {
foreach (ReportType::all() as $type) {
yield $type;
}
}
});
return function() use ($generator) {
$generator->next();
return $generator->current();
};
}
$report->setType($typeGenerator());

Sergey
17.12.2017
20:00:13

Константин
17.12.2017
20:00:40
Эксперимент удался, можно отказываться)

Sergey
17.12.2017
20:01:11
class Test
{
//<editor-fold defaultstate="collapsed" desc="ID, TimeStamps, Stuff...">
private $id;
private $createdAt;
private $updatedAt;
//</editor-fold>
}

Константин
17.12.2017
20:02:12
хм, интересная штука

Sergey
17.12.2017
20:02:13
может пригодится

Константин
17.12.2017
20:02:22
Правда обмазываться комментами как то такое себе

Sergey
17.12.2017
20:02:43
ну.... зато если надо - просто открываешь фолдинг и смотришь)
не теряя контекста

Константин
17.12.2017
20:03:16
Что то defaultstate="collapsed" не работает
Или текущее состояние не сбрасывается от переоткрытия таба?

Sergey
17.12.2017
20:06:16
не сбрасыватеся)
открыл - закрой)
а у других будет по умолчанию закрыт
(только что проверил в другой IDE)