Но хорошо бы и поэкспериментировать с упрощением.
Обычный ход мысли для экспериментов: сделать inversion of references или inversion of control (поменять направления, кто кого знает - ссылается, и кто кого дёргает в каких случаях).