
Sergey
14.09.2017
08:57:55
и скажем так асинхронная работа с I/O немного удобнее в этом плане как раз таки из-за отсутствия необходимости лочить ресурсы. Проще модель выполнения.

Juri
14.09.2017
10:12:14
Кто то работал с xml сайта? http://zakupki.gov.ru/epz/main/public/home.html

Sergey
14.09.2017
10:13:36

Juri
14.09.2017
10:15:42

Google

Sergey
14.09.2017
10:18:36
а хотя не, там вообще у гос закупок форум есть

Sergo
14.09.2017
10:20:39

Антон
14.09.2017
10:20:49
(1)

Juri
14.09.2017
10:21:31
и как называется папка?
control99docs
например для питера будет так
/fcs_regions/Sankt-Peterburg/control99docs/notifications/currMonth
это по 44 фз

Roman
14.09.2017
10:23:34
Ребята, как вы боретесь с количеством зависимостей у класса? Например, классу для работы надо 4-5 репозиториев для вытаскивания данных. Аггрегировать в аля класс-коллекцию этих репозиториев, типа UserRepositoryCollector?

Patrik
14.09.2017
10:27:29
Если ему надо так много репозиториев то он возможно делает слишком много или сущности не собраны в агрегаты и у всего свои репозитории
для первой проблемы, если затрагивается слишком много контекстов, можно все разнести по своим местам и оповещать событиями
но судя по названию UserRepositoryCollector у вас скорее всего запчасти юзера все сами по себе а не в составе агрегата User

Sergey
14.09.2017
10:32:32
у меня есть классы где надо 3 репозитория но это потому что я лох и там 2 репозитория можно убрать поменяв чутка связи
но что бы 5

Google

Sergey
14.09.2017
10:33:26
и наверняка у тебя помимо 5-ти репозиториев еще что-то есть, да?

Roman
14.09.2017
10:37:35
попробуй рассказать что это за репозитории такие и почему тебе столько надо?
Patrik
При создании пользователя, мне надо добавлять или удалять ему доступ в Компании и Приложения, добавлять или удалять Роли в зависимости от Компании и Приложения, создавать новую связь Роль-Компания-Приложения, если таковой нету, и добавлять ее для пользователя.
Есть Hasher класс еще для хеширования пароля :)

Patrik
14.09.2017
10:38:05
Кладите их все в агрегат User и делайте все сохранение только через агрегат и UserRepository

Roman
14.09.2017
10:38:13

Sergey
14.09.2017
10:38:27
я использую для подобного доменные события

Patrik
14.09.2017
10:38:54
ну либо события да, тут уже надо смотреть где границы контекстов в его домене

Sergey
14.09.2017
10:39:22
1 - создать пользователя
2 - в сущности генерится ивент UserRegistered
3 - по postFlush файрю ивенты
4 - отдельные листенеры делают дела, линкуют разные агрегаты, добавляют связи и может быть статистику какую считают
плюсы:
- система максимально разделена, весьма логично разделена причина и следствие
- четкие границы между контекстами
- мало зависимостей и легко тестить
минусы:
- ивенты это не очень явно, по сути надо регламентировать способ узнавать как чего работает. То есть мы должны помимо того что посмотреть код регистрации пользователей, глянуть какие ивенты генерятся и как они аффектят систему

Patrik
14.09.2017
10:42:59
еще я бы добавил тут контроль за тем чтобы все результаты евентов были внутри одной транзакции, если это требуется

Roman
14.09.2017
10:43:07

Sergey
14.09.2017
10:44:39

Roman
14.09.2017
10:44:42

Sergey
14.09.2017
10:44:49
когда данные гарантировано сохранились
все что надо делать по preFlush должно происходить в рамках агрегата юзера
(у меня это User -> Credentials, UserProfie например)
более того - в идеале должна быть возможность безболезненно ложить события в очередь например)
то есть не ок в ивент пихать саму сущность
лучше айдишку только

Google

Roman
14.09.2017
10:47:11
когда данные гарантировано сохранились
Угу, тогда нужно генерировать событие при создании Юзера, типа UserEntityCreated, чтобы можно было добавлять необходимые данные в других контекстах, как Компании, Роли и Приложения, верно?

Patrik
14.09.2017
10:47:13
Ну так не всегда получается, чтобы все что должно быть внутри транзакции было строго в рамках одного агрегата

Roman
14.09.2017
10:47:44

Patrik
14.09.2017
10:48:28
Я в таких случаях кидаю два события, одно внутри транзакции - на нем обновления в других контекстах для которых важна целостность всей операции. второе - вне, для всяких инфраструктурных штук типа обновить индекс, отправить письмо и т.д.

Roman
14.09.2017
10:50:54

Dmitry
14.09.2017
11:31:31
Это очень интересная тема. Пытаемся разделять проект (yii2) на модули. Получается, что только использование событий позволяет обмениваться инфомрацией между модулями. Правильно ли поступаем, что создаем классы-посредники, где регистрируем обработчиков событий между разными модулями?
Да, еще интересует вопрос, как не скатиться до создания отдельных репозиториев для каждой сущности. Что есть предел агрегата и есть ли какие-то методики его ввыявления?

Юрий
14.09.2017
11:47:59
Гитлаб за*бал лежать б*ать

Patrik
14.09.2017
11:49:45

Roman
14.09.2017
11:51:49

Dmitry
14.09.2017
12:00:08
Уж не знаю можно ли, но для жаждущих
Правда книжка показалась уж слишком поверхностной
А кто-нибудь применяет Event Source в своих проектах?

Patrik
14.09.2017
12:20:39
Это какая-то кастрированная версия, там большу 300 страниц в оригинале

Dmitry
14.09.2017
12:21:28
может быть, ибо оригинал не покупал
396 PAGES. Видимо то, что выложил, это free sample

Sergey
14.09.2017
12:32:12
у тебя остальные операции по хорошему не должны влиять на первую
она очень про технические моменты

Google

Sergey
14.09.2017
12:33:13
но никак не про выбор агрегатов

Patrik
14.09.2017
12:34:55

Sergey
14.09.2017
12:35:19
если у тебя одна база данных проблем с этим не должно быть
а вот если в разных - то тогда начинается веселье)

Patrik
14.09.2017
12:36:51
по книге по ддд - если можете сразу эванса и вернона, начинайте сразу с них. но если примеры на си и джаве пугают - лучше начать с этой, тут хотябы глядя на знакомый систаксис появится сначала какая-то связь в голове термин <-> код, а потом уже шлифовать знания на тему как проектировать с таким подходом

Mikhail
14.09.2017
12:45:27

Sergey
14.09.2017
12:48:35

Мишаня
14.09.2017
12:49:03
Знает кто хороший сервис приема биток (не блокчейн) с хорошим апи?

Sergey
14.09.2017
12:49:34

Mikhail
14.09.2017
12:51:27
В оракле есть автономные транзакции.
например нужно положить что-то в очередь для бедных (в той же базе)
не нарушая текущую транзакцию
но в целом да юзекейсы специфические

Art
14.09.2017
14:30:16
Создание деревьев, подходит для списка категорий и комментов. Поддерживает неограниченную вложенность и рандомную позицию в общем массиве родитель-потомок и на оборот. На выходе строится правильное дерево

Oscar
14.09.2017
14:52:39
Какая сложность вычисления детей? Просто я обычно храню ещё left, right позицию
Взял логику у etrepat/baum

Art
14.09.2017
14:58:37
я не математик, алгоритмическим языком не могу назвать сложность. Просто рекурсия
как закончу версию на js, потом скину ссылку на гитхаб

Google

Alexander
14.09.2017
14:59:43
Тема деревьем заезженна уже. Есть много разных подходов и реализаций на все случае жизни.

Dmitriy
14.09.2017
15:00:39
и без рекурсий
например nested set

Art
14.09.2017
15:01:18
гуглил я нестед сет, там все в бд делается, а тут один запрос на получения всех категорий и разбор в скрипте

Dmitriy
14.09.2017
15:01:41
там как раз один запрос для получения всего дерева

Art
14.09.2017
15:02:28
ну мне удобнее обрабатывать в скрипте а не процедуры в бд использовать

Dmitriy
14.09.2017
15:02:53
а там и не нужны процедуры

Art
14.09.2017
15:03:29
http://www.getinfo.ru/article610.html
слишком сложно
в php небольшой скрипт

Dmitriy
14.09.2017
15:03:54
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/tree.md

Art
14.09.2017
15:04:01
заморочек много

Dmitriy
14.09.2017
15:04:05
причем есть для любого фв