
Sergey
15.01.2017
18:48:48
ну и еще там есть всякие рейтинги юзеров в этом компоненте
ну то есть самодостаточное приложение
я в своем проекте где-то 5 таких вот самодостаточных контекстов выделил которые вообще не влияют друг на друга (то есть это цель, сейчас по коду есть зависимости)
и пока я неделю кручу в голове доменные ивенты и мне дико нравится

Google

Sergey
15.01.2017
18:50:13
ну и по поводу дебагов и прочего - доменные ивенты весьма легко трекать
связь между контекстами
ну и ивенты будут сначала собираться в сущностях и тригериться только по успешному коммиту транзакции в базу

F01134H
15.01.2017
19:24:53
тут случайно нет людей, которые шарят в алгоритмах?

Aleh
15.01.2017
19:27:53
Зависит от алгоритмов)

F01134H
15.01.2017
20:54:30
?

Sergey
15.01.2017
21:18:08

Marat
15.01.2017
21:27:21
пастух люцифера

F01134H
15.01.2017
21:27:46
Какой варик быстрее: заполнять бинарное дерево до полного пустыми значениями и юзать одномерный массив для хранения, или юзать неполное бинарное дерево, но заполнять двумерный массив?

Sergey
15.01.2017
21:29:02

F01134H
15.01.2017
21:29:21
цель - выбрать наиболее быстрый вариант D:

Sergey
15.01.2017
21:29:38
окей, дерево зачем тебе?

Google

Sergey
15.01.2017
21:30:19
ну мол... немного непонятно из описания что ты вообще хочешь сделать и как ты себе представляешь бинарное дерево состоящее из пустых значений
в этом же смысла нет

F01134H
15.01.2017
21:30:55
Есть, можно юзать одномерный массив для хранения

Sergey
15.01.2017
21:31:08

F01134H
15.01.2017
21:31:12
в полном бинарном дереве каждый новый уровень всегда вдвое больше предыдущего

Alexander
15.01.2017
21:32:05

Aleh
15.01.2017
21:34:55
да, вопрос выше правильный

F01134H
15.01.2017
21:35:25
поиск например

Aleh
15.01.2017
21:35:39
поиск числа в дереве?
пирамида?
красно-черное?
если просто от балды собранное дерево, то какая разница если все элементы смотреть надо)

Sergey
15.01.2017
21:36:36
поиск например
поиск разный бывает. И на выбор алгоритмов и структур влияет характер данных и поиска.

F01134H
15.01.2017
21:37:40
да

Alexander
15.01.2017
21:45:22
Если только поиск то подумай о хеш таблицах еще.

da horsie
15.01.2017
22:30:19
Дайте-ка я побрежу. Есть набор моделей, например Author, Topic, Comment etc. Они могут быть в отношениях, довольно сложных, например Comment отновится к определенному Topic, и у него есть Author. Конструкции типа comment.getTopics[0].getAuthor.getFolowers понятно нарушают LOD. Может быть тогда вообще сделать так, чтобы сущности не знали друг про друга? У Comment не будет методов вроде getTopic() или getAuthor().
А информация о связях, например, будет храниться отдельно. как-то. Не знаю, как.

Sergey
15.01.2017
22:32:00
может тебе не надо просто гидрировать данные на сущность?)
ну то есть.... что ты сделать хочешь? Подготовить данные для UI?

Google

da horsie
15.01.2017
22:32:17
а как надо?
ну да

Sergey
15.01.2017
22:32:31
ну сделай выборку, жазни все в ArrayHydrator какой
и радуйся
не надо париться о LOD)
не надо париться с геттерами

da horsie
15.01.2017
22:33:04
мне надо нарисовать клиенту сложную структуру типа комменты, их авторы, какие-то данные об авторах, может быт еще что-то

Sergey
15.01.2017
22:33:29
ну так, идеальный кейс для такой штуки как SQL)

da horsie
15.01.2017
22:33:53

Sergey
15.01.2017
22:34:26
ну просто через query builder выбираешь те данные которые тебе нужны

da horsie
15.01.2017
22:34:35
получается у меня DB mapper будет возвращать некий сложный массив?

Sergey
15.01.2017
22:34:46
и говоришь ему в getResult что бы не ObjectHydrator юзало а ArrayHydrator

da horsie
15.01.2017
22:34:48
и этот массив отправится прямо во вью?

Sergey
15.01.2017
22:34:53
ну тип того
еще ты можешь в select писать штуки вроде select new MyViewDTO(author.id)
но я этим пока не пользовался особо(
насколько я понял такое работает хорошо для простых данных
но это если ты хочешь загоняться
если надо оч быстро запилить - вариант с нарушением LoD будет намного быстрее
эдакий прототип

Google

da horsie
15.01.2017
22:36:43
прототип у меня уже работает
щас фаза рефакторинга

Sergey
15.01.2017
22:37:18
ну я хз... было б неплохо выслушать других людей

Admin
ERROR: S client not available

Sergey
15.01.2017
22:37:29
потому что то о чем я тебе вещаю это мой бзик последние пару месяцев
и я еще не наступил с ним на грабли но допускаю что они где-то там... впереди

da horsie
15.01.2017
22:37:49
чуть более в сторону вопрос: зачем вообще моделям знать о своих связях?
зачем Comment знать о своем Author?

Sergey
15.01.2017
22:38:06
что бы построить агрегат сущностей
public function comment(string $message, User $author)
{
$this->comments->add(new Comment($message, $author);
}
ну то есть без связей такое сделать не получится особо
а потом можно накладывтаь на это добро бизнес ограничения
вроде "только один автор может постить в этот топик"
if ($this->comments->matching(Comment::byAuthorCriteria($author)) {
throw new MultimpleCommentsNotAllowed($author, $topic)l
}

da horsie
15.01.2017
22:40:28
а почему агрегат не может знать о связях? ну типа $comenter = new PostCommenter($post); $commenter->comment($text, $date)

Sergey
15.01.2017
22:40:42
посмотри на мой кейс
если бы коммент не знал об авторе
ты бы не смог сделать такую выборку как у меня в примере
их сущности Topic по коллекции комментов по отдельной критерии
ну то есть связи важны. Их количество нужно минимизировать, но в случае авторов-комментов она хотя бы с одной стороны должна быть. И логичнее ее размещать у коммента

Google

Sergey
15.01.2017
22:42:01
односторонюю
не?

da horsie
15.01.2017
22:43:53
смотрю, не понимаю, почему это же самое не реализовать в PostCommenter

Sergey
15.01.2017
22:44:16
через корень агрегата происходят все операции над ним

da horsie
15.01.2017
22:45:02
а у меня и нет доктрины

Sergey
15.01.2017
22:45:14
а сущности тогда откуда?

da horsie
15.01.2017
22:45:21
ну это модели
просто модели типа Comment

Sergey
15.01.2017
22:45:35
"модели" - это очень абстрактное слово
модель данных типа?
ну тогда она будет просто повторять твою базу данных