Обычно вы кодируете что-то вроде этого (псевдокод):
boolean inEventProcessing = false;
processEvent(event){
if inEventProcessing return
inEventProcessing = true
doProcessEvent(event)
inEventProcessing = false
}
Альтернатива состоит в том, чтобы убедиться, что по построению петли не случаются. Это концептуально более чистый способ, но его трудно сделать, если вы не придумали его в самом начале. Один из способов состоит в том, чтобы позволить наблюдателям только аргументы конструкторам наблюдаемых. Таким образом, было бы невозможно построить петли. Но это чрезвычайно жесткая структура, которая, вероятно, вызывает различные проблемы.
Я подозреваю, что решение этих проблем приведет к действительно хорошей и чистой архитектуре или к полному и экстремальному беспорядку, в зависимости от команды, работающей с ней.