2010-05-10 4 views
0

Что такое хороший шаблон для обмена данными между связанными представлениями ?.Шаблон для обмена данными между представлениями (MVP или MVVM)

У меня есть приложение, в котором 1 форма содержит много мелких видов, каждый вид ведет себя независимо друг от друга более или менее (они общаются/взаимодействуют через шину событий). Каждый раз мне часто приходится передавать одни и те же объекты в дочерние представления. Иногда мне нужен тот же самый объект, который нужно передать дочернему представлению, а потом он передает его на другой содержащийся сам ребенок.

Что такое хороший подход к совместному использованию этих данных между всеми представлениями, содержащимися в родительской форме (представлении)?

Я изучил CAB и их подход, и каждый «вид» имеет «рабочий элемент управления», этот рабочий элемент имеет словарь, который содержит общее «состояние» между содержащимися представлениями.

Это лучший подход? просто доступный словарь, доступ ко всем представлениям в корневом представлении?

Мой текущий подход прямо сейчас состоит в том, чтобы иметь функцию на представлении, которая позволяет установить объект для этого вида. Что-то вроде

view.SetCustomer(Customer c); 

тогда, если представление содержит ребенка смотреть он знает, чтобы установить его на вид ребенка ала:

this.childview1.SetCustomer(c); 

Приложение написано на C# 3.5, для WinForms с помощью MVP со структурной картой как поставщик IoC/DI.

ответ

0

Josh Smith и Marlon Grech используют шаблон посредника с реализацией, которая использует слабые ссылки для предотвращения утечек памяти. Проверьте это:

http://marlongrech.wordpress.com/2009/04/16/mediator-v2-for-mvvm-wpf-and-silverlight-applications/

+0

Теперь я использую вариацию шаблона медиатора с системой событий. в основном, запускают события, когда загружаются общие данные, поэтому просмотры, которые нужны, получат его и используют. Спасибо. – Dovix

0

Похоже, что общие данные должны принадлежать в базовой модели, а не вид.

Насколько это разделение происходит, я бы предположил, что что-то создает отдельные Представления и дает им ссылку на их Модель? Это похоже на соответствующий механизм совместного использования.

+0

вы правы, я начал подбирать данные пользовательского интерфейса с большим количеством DTO вместо того, чтобы просто пытаться использовать модель напрямую, и это помогает разделить необходимость совместного использования экземпляра. – Dovix

+0

Рост популярности DTOs, похоже, решает огромное количество проблем. Забавно, что после долгих лет ортодоксальности ОО мы начинаем осознавать, что, в конце концов, есть ценность для этих «структурных» вещей! Чем больше вещей меняется ... – kyoryu

+0

Да. DTO - хороший инструмент для того, чтобы просто получить то, что вам нужно, чтобы отправить его прямо в пользовательский интерфейс без дополнительного вздутия. Слишком плохо, как и все другие модели/методы, люди просто злоупотребляют ими, пока не станут проблемой. Skillz проделать длинный путь :) – Dovix