MVC для настольного приложения, соединение пара представления/контроллера с другим

У меня был главным образом опыт с "серверной стороной" mvc платформы, очень популярные на различных языках как ASP.NET MVC или Платформа Зенда для php, Киньтесь за Java и т.д.

Некоторых из них также возможно использовать для разработки настольных приложений, но я никогда не пробовал это.

Я полностью понимаю, что шаблоны разработки не должны ограничивать реализацию, они должны обычно обеспечивать идеи и общие правила, которые могут быть по-другому реализованы.

Теперь я играю с одной из тех mvc платформ для обычной разработки Настольных приложений (это не имеет многих учебных руководств или достойного быстрого запуска), и у меня есть некоторые вопросы относительно к mvc парадигме. Вот один из них:

Что распространенные способы состоят в том, чтобы связать различные взгляды / контроллеры? Если я нажимаю кнопку, специальный контроллер для той кнопки диспетчеризирует событие, которое сгенерировано, делает что-то с моделью, состоянием отображения изменений. Но что, если я должен взаимодействовать с другим представлением? Как, когда я нажимаю на кнопку, она изменяет модель, но также и я должен открыть другое окно или состояние изменения другого окна (скрывающий кнопку на другом окне скажем...), не изменяя на самом деле модель. Что распространенные способы здесь для обращения к этому? Мой первый контроллер должен генерировать событие для второго контроллера (или второго представления)? Или второй контроллер должен обрабатывать события от первого представления?

Некоторые ссылки или примеры для любых языков/платформ были бы действительно полезны, Спасибо!

7
задан lcf 16 May 2010 в 01:24
поделиться

2 ответа

Интересный вопрос. Мои мысли:

Вы имеете дело с фундаментальным различием между серверной частью и настольным компьютером: приложение Windows может одновременно отображать более одного представления. (На данный момент мы проигнорируем частичные представления и другие разногласия.)

В MVC Контроллер - это место, где происходит действие (каламбур), поэтому здесь все должно быть связано. Вам нужно слабосвязанное решение, которое требует внедрения зависимостей. Подумайте о Spring, Unity, MEF и т. Д. Это позволяет соединить контроллеры вместе, чтобы они могли реагировать на события друг в друге, не нарушая никаких принципов (например, разделение проблем, единственная ответственность).

2
ответ дан 7 December 2019 в 12:16
поделиться

Общим шаблоном для слабо связанной коммуникации между объектами является шаблон Mediator:

http://en.wikipedia.org/wiki/Mediator_pattern

Это позволяет коммуникации между объектами через посредника, например, один объект публикует сообщение посреднику, и ноль или более объектов могут подписаться\получить сообщение. Публикация осуществляется через посредника, а не напрямую, поэтому нет прямой связи.

Примером этого паттерна является "служба агрегатора событий" в CAL (он же Prism), составном фреймворке для WPF-приложений, обычно используемом с MVC-подобным паттерном - MVVM:

http://msdn.microsoft.com/en-us/library/ff648465.aspx

http://msdn.microsoft.com/en-us/library/ff647600.aspx

Update

В MVVM служба агрегатора событий (медиатор) обычно используется для обеспечения свободно связанного взаимодействия между вью-моделями (примерно как контроллеры в MVC). Таким образом, вью-модели могут публиковать и подписываться на интересные общие сообщения.

3
ответ дан 7 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: