
Sergey
16.04.2018
09:12:15
как набор функций работающих с некой структурой данных
что бы ты мог в рантайме поведение подменять
ну мол то о чем DCI

Google

Sergey
16.04.2018
09:13:24
я могу этого добиться с доктриной только путем того что у меня будет некий инстанс как стэйт, модель данных. структура которая только следит за собственной консистентностью, а вся логика в некой обертке/прокси
ну то есть в PHP это все выглядит неестественно....
а потому популярность имеют анемичные модели и сервисы менеджеры (я лишь предлагаю сохранить "принадлежность" стэйта тому где логика)
ну короч я ж говорю - мысль сырая....

Bohdan
16.04.2018
09:14:47
ну да, данные и роли
> "принадлежность" стэйта тому где логика
скорее наоборот
логика вяжется к стейту

Sergey
16.04.2018
09:15:20
пока думаю что максимально близко эта мысль раскрыта в DCI но не уверен еще на 100%.... просто единственный аспект о котором я мало пока думал - различия между статическим и динамическим миром (ранаймом и кодом)

Timur
16.04.2018
09:15:51


Sergey
16.04.2018
09:16:00

Bohdan
16.04.2018
09:16:10

Sergey
16.04.2018
09:16:34

Google

Sergey
16.04.2018
09:16:42
ты сейчас логический кохижен описал

Bohdan
16.04.2018
09:16:59
я могу кинуть видос, но он не совсем про это
главная его мысль: imperative shell, functional core

Timur
16.04.2018
09:17:12

Bohdan
16.04.2018
09:17:25
пускай твои сервисы будут тупыми и будут тупо дергать сущности

Sergey
16.04.2018
09:17:32

Bohdan
16.04.2018
09:17:34

Sergey
16.04.2018
09:17:40
а не как persistence
p.s. если ты готов мириться с ограничениями вида "не может быть односторонних one-to-many"

Bohdan
16.04.2018
09:17:59
просто логика свойственна сущности, не менеджерам

Timur
16.04.2018
09:18:08

Sergey
16.04.2018
09:18:22
слои говно
их надо очень осторожно вводить
полностью понимая что они тебе дают
я например использую сущности в контроллерах и мне норм))
потому что у меня в таком варианте контроллер всеравно на 2-3 строчки кода
public function someAction(SomeEntity $something, User $currentUser) {
$something->doSomethingAs($currentUser);
$this->flushChanges();
}
главное что бы в контроллерах не появлались if-ы

Timur
16.04.2018
09:20:24

Sergey
16.04.2018
09:20:45

Google

Sergey
16.04.2018
09:21:55

Konstantin
16.04.2018
09:32:44
https://telegram.veesecurity.com/
если вдруг кому понадобится
пока что на работе это помогло. хотя наверное скоро и это потухнет )

Vladislav
16.04.2018
09:36:23
а встроенное прокси?

Konstantin
16.04.2018
09:38:56
не знаю

Sergey
16.04.2018
09:39:07
ок, бандла нет. Там просто используют doctrine аннотации. Но это не мешает делить апи, указывая путь к папке для генерации доков. В примере middle-office это один проект

Konstantin
16.04.2018
09:40:28
код покажи

Timur
16.04.2018
09:50:37
о, графы.... а можешь чуть рассказать что делаешь?
На самом деле я просто хотел сделать иерархию литературных жанров (о чем я тут говорил несколько дней назад), но у меня требование такое, что один поджанр может входить одновременно в несколько наджанров, то есть иметь несколько родителей, стало быть, это не иерархия уже, а направленный ацикличный граф (Directed Acyclic Graph). Так как SQL не самое удобное хранилище для деревьев, пришлось немного поломать голову, как лучше всего это все хранить, но решение в итоге я нашел

Sergey
16.04.2018
09:51:21

Timur
16.04.2018
09:52:04
neo4j? orientdb?)
Не хочу смешивать различные хранилища, у меня все в мускуле хранится.

Sergey
16.04.2018
09:53:42
ну сам себе в ноги стреляешь тогда)

Timur
16.04.2018
09:57:26
ну сам себе в ноги стреляешь тогда)
Да зачем мне для небольшой таблицы использовать отдельное хранилище. Я даже не слышал доселе об OrientDB и neo4j, сейчас все это изучать у меня времени нет. Мне еще elasticsearch прикручивать надо будет, потом надо будет заставлять работать это все вместе.

Konstantin
16.04.2018
09:57:33
@fes0r привет

Sergey
16.04.2018
09:57:48

Damir
16.04.2018
09:58:08
а встроенное прокси?
телега заметно лагает, файлы не подгружает, и мелькает постоянно что идет соединение

Sergey
16.04.2018
09:58:22

Konstantin
16.04.2018
09:58:52
ты же пишешь апишки, емнип, чем документируешь?

Google

Konstantin
16.04.2018
09:59:16
или ты сначала документация потом апи, и не юзаешь автогенерацию документации?

Sergey
16.04.2018
09:59:26
сначала доки и потом реализация

Timur
16.04.2018
09:59:36

Sergey
16.04.2018
09:59:37
что бы можно было распаралелить разработку

Konstantin
16.04.2018
09:59:51
ясн

Sergey
16.04.2018
10:00:56
будут сложные запросы, умный живой поиск и надо, чтобы это было быстро
ну ладно, я не настолько шарю в mysql.... я больше к тому что тот же orientdb или neo4j интегрировать в проект проще чем эластику, учитывая что большую часть того что мне эластика дает я могу делать на postgresql. С эластикой я б игрался на реально больших объекмах... ну или специфичных штуках (например мне надо было класстеризацию мутить)
просто графы в виде реляций это всегда будет боль и придется денормализовать по итогу
а поскольку mysql хоть и умеет json но плоха с построением индексов - то всеравно будут беды
короч мое имхо - не надо бояться юзать те хранилища которые нужны под задачу. ДРугое дело что если не планируются нагрузки то плевать вообще как сделал... лишь бы изолировано что бы потом можно было мигрировать

Admin
ERROR: S client not available

Timur
16.04.2018
10:14:45
просто графы в виде реляций это всегда будет боль и придется денормализовать по итогу
У меня заранее определена глубина вложенности в 6 уровней, и есть примерное представление о количестве узлов, скажем 500. Думаю для такого маленького дерева не страшна реализация в mysql.
В данный момент у меня такая реализация:
Таблица Genre, с полями id и name.
И таблица GenreEdge (раньше называлась GenreHierarchy) с полями: id, level1, level2, level3, level4, level5, level6.
Каждая строка этой таблицы хранит уникальный путь (ребро графа, отсюда и edge) от родителя к последнему предку.
Раньше была реализация посложнее, расчитанная на теоретическ бесконечный уровень вложенности и очень быструю выборку, но потом я зае**лся и плюнул на все, решил сделать более простой вариант, все равно граф небольшой, какая разница.
А мучился я над первой реализацией, потому что хотел сделать что-то уникальное, не привязанное к моему проекту, в виде библиотеки


Sergey
16.04.2018
10:16:02
У меня заранее определена глубина вложенности в 6 уровней, и есть примерное представление о количестве узлов, скажем 500. Думаю для такого маленького дерева не страшна реализация в mysql.
В данный момент у меня такая реализация:
Таблица Genre, с полями id и name.
И таблица GenreEdge (раньше называлась GenreHierarchy) с полями: id, level1, level2, level3, level4, level5, level6.
Каждая строка этой таблицы хранит уникальный путь (ребро графа, отсюда и edge) от родителя к последнему предку.
Раньше была реализация посложнее, расчитанная на теоретическ бесконечный уровень вложенности и очень быструю выборку, но потом я зае**лся и плюнул на все, решил сделать более простой вариант, все равно граф небольшой, какая разница.
для такого маленького дерева - да
а еще если оно редко меняется то вообще пофигу


Yuriy
16.04.2018
10:19:02
добрый день
возник вопрос в отдельном сервисе выполняю приходование товара обновляю одну таблицу(таб С) и создаю новые записи в 2 других (таб А, таб Б), причем в одной из новых таблиц(таб Б) данные зависят только от SN товара, остальные параметры постоянны. Очень хочется создание данных для этой таблички(таб Б) вынести в отдельный метод, т.е. на один товар создается 8 записей (для таб Б).
Обновление/создание записей (таб А, Б, С) планировал реализовать в одной транзакции, т.е. это по бизнес логике одна операция,
вопрос если (для таб Б) создание записей вынести в отдельный метод то как быть с транзакцией?
получается (таб Б) будет отделена от транзакции, можно это как то исправить?


Timur
16.04.2018
10:27:01
а еще если оно редко меняется то вообще пофигу
Редко, но все же меняться будет. Представь, ты создал дерево из 150 узлов под категорией Роман, а потом это дерево надо скопировать в категорию Рассказ. Тут и понадобится операция копирования всего дерева.
Раньше в моей таблице каждый узел указывал на всех своих родителей и хранил инфу об отдаленности от своего родителя, пример:
id | child | parent | level
0 | 5 | 4 | 1
1 | 5 | 3 | 2
2 | 5 | 2 | 3
3 | 5 | 1 | 4
такая таблица достаточна, для хранения иерархий с любым уровнем вложенности, предки могут иметь сколько угодно родителей и выборка при этом очень быстрая. Но у меня возникли проблемы с валидацией, особенно когда перемещаются целые ветки (меремещение в самого себя, перемещение в тоже самое место, копирование ветки и прочее и прочее). Но если бы я закончил, можно было бы опубликовать все это
Как библиотеку


Anton
16.04.2018
10:50:15
имеется таблица со связями, нужно сделать сортировку, фильтрацию и пагинацию по ней и ее связям, сначала взял доктриновский пагинатор, и было более-менее норм, пока не дошел до один ко многим, без разруливания со стороны постгреса в результате получается много дублей основной таблицы, если рулить постгресом, то на выходе невалидные сущности - может кто подскажет оптимальный алгоритм для таких ситуаций?

Andrey
16.04.2018
11:20:16
имеется таблица со связями, нужно сделать сортировку, фильтрацию и пагинацию по ней и ее связям, сначала взял доктриновский пагинатор, и было более-менее норм, пока не дошел до один ко многим, без разруливания со стороны постгреса в результате получается много дублей основной таблицы, если рулить постгресом, то на выходе невалидные сущности - может кто подскажет оптимальный алгоритм для таких ситуаций?
тебе нужно пагинировать основную таблицу, или и её, и связи?

Anton
16.04.2018
11:21:26
пагинация на основную

Google

Anton
16.04.2018
11:22:04
в принципе дистинкт он может решить часть проблем, но не все

Andrey
16.04.2018
11:22:38
group by?

Anton
16.04.2018
11:23:29
в постгрессе это довольно муторный процесс - придется в групбай почти все поля пихать, или агрегатные ф-ии на каждое поле не в групбае

Andrey
16.04.2018
11:26:22
чёт сложно
SELECT task.* FROM task
LEFT JOIN task_entry ON task.id = task_entry.task_id
GROUP BY task.id;
где много?

Valentin
16.04.2018
11:30:32

Виктор
16.04.2018
11:33:18

Anton
16.04.2018
11:34:19
вопрос снимается, доктрина оказалась гораздо умнее меня)) просто dql джоины прикрутить нужно было и убрать у связей жадную загрузку

Vladislav
16.04.2018
11:37:35
какой айсикью у доктрины?

Anton
16.04.2018
11:44:14
... и эту доктрину звали Альберт Эйнштейн

Timur
16.04.2018
11:48:08
... эту девочку звали Доктрина
Кто нибудь использовал паттерн Command Bus в своих симфони проектах?

Andrey
16.04.2018
11:53:41

Sergey
16.04.2018
11:53:48
да, мораль шин команд - они тебе не нужны покуда у тебя нет необходимости в асинхронной обработке действий
ну либо тебе надо тупо ограничить разработчиков что бы те в операциях записи не возвращались значений

Andrey
16.04.2018
11:54:09

Timur
16.04.2018
11:54:35
+
И что скажешь плохого/хорошего?

Andrey
16.04.2018
11:54:50

Sergey
16.04.2018
11:55:00
НО! ты как бы можешь и через сервисы это делать спокойно))
прокси там, декораторы, AOP