Сейчас у нас дата проекта обновляется всегда, даже если мы прокоментировали закрытую задачу, (хотя дата самой задачи при этом не меняется). Получается каждый листенер сам решает, проверять ли закрытость задачи. С одной стороны хорошо, наверняка какому-нибудь листенеру будет не важно закрыта ли задача. С другой стороны плохо, раз мы постоянно забываем это проверять, а при проверке копируем логику.
А некоторые листенеры вобще вешаются на гору евентов разных сущностей, и им проверить это вобще будет затруднительно. **(кстати активность из tndt-11 тоже будет генерится когда задача закрыта, или когда её меняет root, что не факт, что плохо, но следует учесть при дальнейшем подсчете).
Варианты решения:
Доменные сервисы просто не генерят события бизнес-действий если действие совершает root либо действие совершается над закрытой задачей(архивным документом). Минус в том, что какие-то листенеры должны будут срабатывать и в этом случае.
В событие добавляется информация о том считается ли объект завершившим жизненный цикл и более не нуждающемся в обновлении даты (что-то общее, вроде LifeFinished, а задачи и документы сами будут решать как его реализовать. Это хороший вариант, и каждый листенер будет сам решать как это обрабатывать. проект будет не обновлять свою дату, а активность может все равно отметится, но сохранив этот флаг.
Кстати заодно в событие можно записывать актора. Так листенеры смогут не зависеть от security, и если мы захотим сделать какое-нибудь бизнес действие отделенным от реквеста, это будет сделать проще.
А нужен ли нам IsArchivedObjectInterface если его базовая реализация лежит в InProjectEvent? Т.е. логически это разные примеси, но у нас просто нет сейчас евентов, которые бы проверяли источник на незакрытость/архивированность, и не были бы внутри проекта