Как реализовать шаблон MVC, не поддерживая Представления

Я хотел бы реализовать шаблон MVC в трудной ситуации. Трудность состоит в том, что мои Модели (объекты, генерирующие события), долговечны, в то время как Представления (получатели событий) являются недолгими. Моя проблема состоит в том, что посредством соединения между этими двумя, долговечные Модели поддерживают мои недолгие Представления, т.е. они не могут быть собраны "мусор".

  [MODEL] ------- <weak> -------> [VIEW]
     |
 <strong>
     |
     v
[CONTROLLER]

Способ работать вокруг этого состоит в том, чтобы сохранить соединения в Модели в WeakHashMap <Представление, Контроллер>. Это по существу позволяет Представлению, которое будет собрано "мусор", и когда это произойдет, WeakHashMap выведет соответствующий Контроллер, также. Таким образом, если Контроллер не содержит (сильную) ссылку на Представление - который это обычно делает. В этом случае Представления поддерживаются через сильные ссылки, пока Модель не выходит из объема.

  [MODEL] ------- <weak> -------> [VIEW]
     |                               ^
 <strong>                            |
     |                               |
     v                               |
[CONTROLLER] ----------- <strong> ---/

Там другой путь состоит в том, чтобы присоединить слушателей моих моделей, которые не сохранят мои представления (и контроллеры) живой?

ОБНОВЛЕНИЕ: отвечать на вопрос MDMA: Контроллер сохраняет ссылку на Представление, потому что это должно обновить Представление. Эта ссылка может быть слабой, но я хотел бы иметь Контроллеры, чтобы быть анонимными внутренними классами класса Представления, в этом случае Экземпляр контроллера имеет неявную сильную ссылку к экземпляру Представления.

5
задан Lóránt Pintér 22 July 2010 в 13:07
поделиться