Этап
Готова
Тип
Ошибка
Приоритет
Повышенный
Трудоемкость
Обычная
Создана
Дата создания
2 года назад
Назначена
Обновлена
2 года назад

Сейчас у нас дата проекта обновляется всегда, даже если мы прокоментировали закрытую задачу, (хотя дата самой задачи при этом не меняется). Получается каждый листенер сам решает, проверять ли закрытость задачи. С одной стороны хорошо, наверняка какому-нибудь листенеру будет не важно закрыта ли задача. С другой стороны плохо, раз мы постоянно забываем это проверять, а при проверке копируем логику.

А некоторые листенеры вобще вешаются на гору евентов разных сущностей, и им проверить это вобще будет затруднительно. **(кстати активность из tndt-11 тоже будет генерится когда задача закрыта, или когда её меняет root, что не факт, что плохо, но следует учесть при дальнейшем подсчете).

Варианты решения:

Доменные сервисы просто не генерят события бизнес-действий если действие совершает root либо действие совершается над закрытой задачей(архивным документом). Минус в том, что какие-то листенеры должны будут срабатывать и в этом случае.

В событие добавляется информация о том считается ли объект завершившим жизненный цикл и более не нуждающемся в обновлении даты (что-то общее, вроде LifeFinished, а задачи и документы сами будут решать как его реализовать. Это хороший вариант, и каждый листенер будет сам решать как это обрабатывать. проект будет не обновлять свою дату, а активность может все равно отметится, но сохранив этот флаг.

Кстати заодно в событие можно записывать актора. Так листенеры смогут не зависеть от security, и если мы захотим сделать какое-нибудь бизнес действие отделенным от реквеста, это будет сделать проще.

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius 2 года назад

А нужен ли нам IsArchivedObjectInterface если его базовая реализация лежит в InProjectEvent? Т.е. логически это разные примеси, но у нас просто нет сейчас евентов, которые бы проверяли источник на незакрытость/архивированность, и не были бы внутри проекта

 demius 2 года назад

Так, а архивный проект как? Не помеха дату обновлять?

 demius 2 года назад

так, смена статуса дату меняет, комментирование устаревшего документа меняет, архивного не меняет.

 demius 2 года назад

Прежде чем принимать, надо еще посмотреть, обновляет ли дату проекта редактирование/комментирование/смена статуса проекта. А то, кажется, что нет (или это только в 0.2 нет)

 demius 2 года назад

А вот эта задача решилась через контракт, и системы дополнительных методов событий, чтобы сабскрайберы просто требовали от событий, на которые они подписаны реализовывать контракт, а не елать бесконечные ряды instanceof Заодно сделали трейт для сервисного юзера, но не факт, что с ним оно понятнее. (хотя если не один рут станет сервисным, может спасти)

 demius 2 года назад

Насчет того где держать контракты евентов вопрос. С одной стороны ими будут пользоваться и сервисы, как делает это ActivityFactory. С другой они же и обычными Event будут пользоваться. Мы уже пробовали корневую директорию, внесли в src/Entity/Contract теперь вынесли обратно. Вобще хз как лучше.

 demius 2 года назад

Кстати вопрос, а точно ли все-все интерфейсы считать контарктами? Например интерфейсы евентов? они же только сабскрайберам и будут нужны? Может их в Event/Contract

 demius 2 года назад

по идее было бы просто, но возникает вопрос с CommentEvent. Он тоже не должен менять дату проекта, если сущность закрыта, но у комента это не очевидно, т.е. надо в евенте делать гору instanceof сначала на типы евентов, а потом на типы объектов в комменте.

Либо сразу предусамтривать это в объектах события, благо не только ProjectOnUpdate его требует