MVP шаблон - вопрос дизайна - PullRequest
3 голосов
/ 28 декабря 2010

Мы пытаемся использовать шаблон MVP в нашем текущем проекте (приложение asp.net) и столкнулись с некоторыми проблемами.Страница имеет несколько разделов, и мы используем пользовательские элементы управления для этих независимых разделов.Теперь каждый пользовательский элемент управления имеет свой собственный вид и презентатора, а страница выступает в качестве базового вида.Теперь вопрос в том, как передать ему данные, необходимые для управления пользователем?

Согласно текущему дизайну, ведущий страницы получит необходимые данные для всей страницы.Как эти данные могут быть переданы в презентатор пользовательского элемента управления?

Другой подход, который мы думаем, состоит в том, чтобы вместо этого создавать только представления для пользовательских элементов управления и использовать страницу-презентатор для обработки всех событий.В этом случае мы будем иметь несколько интерфейсов представления, которые будут реализованы каждым представлением пользовательского элемента управления.Но как докладчик страницы взаимодействует со всеми различными представлениями?

Спасибо, jbn

Ответы [ 3 ]

1 голос
/ 28 декабря 2010

Почему у пользовательских элементов управления есть собственные представления и докладчики?

Я предлагаю иметь представление и докладчика для страницы и взаимодействовать с пользовательскими элементами управления через просмотр страницы. Если вам нужно обрабатывать события или передавать данные в пользовательские элементы управления и из них, вы можете представить их на странице, а представление страницы может обернуть их для докладчика. Обтекание предотвращает непосредственное взаимодействие докладчика с пользовательским элементом управления.

Вот какой-то псевдокод:

IFooPageView
{
  string SomeData {get; set;}
  event EventHandler SomeEvent;
}

public class FooPageView : IFooPageView
{
   public event EventHandler SomeEvent;
   public SomeData 
   {
         get { return myUserControl.SomeData;}
         set { myUserControl.SomeData = value;}
   }   

   protected override void OnInitComplete(EventArgs e)
   {
     //handle the user control event
     this.myUserControl.SomeEvent += SomeEvent_EventHandler;
   }

   private void SomeEvent_EventHandler(object sender, EventArgs e)
    {            
        //Raise the user control event to the presenter
        if (SomeEvent!= null)
            SomeEvent(this, EventArgs.Empty);
    }
}

Я бы прочитал Супервизирующий контроллер ASP.NET Фила Хаака (представление модели) от схемы до модульных тестов и кода

В статье Фила много хорошей информации о MVP для веб-форм.

0 голосов
/ 28 декабря 2010

Не уверен, что оно точно соответствует MVP, но вы можете выставить свойство (View) из ваших UC и обновить его, добавив данные на вашей странице.

0 голосов
/ 28 декабря 2010

одно из решений, которое я могу придумать

1- Вести список составленного докладчика на докладчике верхнего уровня, а когда вы получили данные на докладчике верхнего уровня, вы можете распространять данные, выбираяправый ведущий из списка.

...