Разделяйте события симуляции и уведомления
🧪 Design pattern Получено из Political World
В модах с насыщенной симуляцией нельзя считать, что каждое внутреннее событие обязано превращаться в уведомление игроку.
Разделяйте уровни
Заголовок раздела «Разделяйте уровни»Удобная модель:
Simulation ↓Domain event ↓Notification policy ↓UI feedТак симуляция может оставаться глубокой, а интерфейс — читаемым.
Политики уведомлений
Заголовок раздела «Политики уведомлений»Для каждой категории событий можно выбрать один из вариантов:
- Immediate — важное и редкое, показывать всегда.
- Rate-limited — полезное, но слишком частое для постоянного показа.
- Suppressed — внутренняя деталь, которую не обязательно показывать.
- Aggregated — много событий объединяются в периодический отчёт.
Почему deferred queue не всегда спасает
Заголовок раздела «Почему deferred queue не всегда спасает»Если лента уже шумная, ограничить частоту, но сохранить все пропущенные сообщения в очереди — значит просто перенести спам в будущее.
Quiet Feed в Political World специально отбрасывал часть лишних сообщений, а не проигрывал их позже.
Для важной информации обычно лучше агрегация:
Плохо: 17 отдельных сообщений об изменении идеологий
Лучше: "За этот год произошло 17 изменений идеологий."Отладка поведения на паузе
Заголовок раздела «Отладка поведения на паузе»Не смешивайте два разных вопроса:
- симуляция продолжает создавать новые события?
- UI продолжает показывать уже созданные события?
Сообщение, появившееся вскоре после паузы, может быть хвостом отображения.
Чтобы доказать, что симуляция игнорирует паузу, логируйте момент/счётчик создания событий, а не только сообщения, появившиеся в UI.