Какие правила вы используете для определения методов и членов MVP - PullRequest
0 голосов
/ 22 мая 2009

При использовании шаблона MVP я часто сталкиваюсь с методами и членами, которые, кажется, не попадают в классы View или Presenter ... Мой вопрос: какие правила вы используете, чтобы решить, какие функциональные возможности лежат в каких классах? Я относительно новичок в MVP, поэтому, пожалуйста, позабавьте меня.

ТИА.

Ответы [ 2 ]

4 голосов
/ 22 мая 2009

Я склоняюсь к варианту пассивного просмотра MVP, так что это не проблема для меня. В пассивном представлении представление в значительной степени делегирует что-то более сложное, чем простое назначение докладчику.

Вы получаете шаблон, который выглядит следующим образом:

public class MyView: IView
{
    private MyPresenter Presenter;

    private OnEvent()
    {
        Presenter.DoSomething();
    }

    public string MyProperty
    {
        get{ return UIControl.Property;}
        set{ UIControl.Property = value}
    }
}

public interface IView
{
    public string MyProperty{ get; set;}
}

public class MyPresenter
{
    private IView view;

    public void DoSomething()
    {
        ...
        view.MyProperty = something;   
    }
}

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

1 голос
/ 22 мая 2009

Это сводится к тому, сколько манипуляций с пользовательским интерфейсом происходит. Если в методе много прямого доступа к отдельным элементам управления, то, скорее всего, он принадлежит докладчику. В противном случае это принадлежит на вид. Цель состоит в том, чтобы уменьшить взаимодействие между представлением и подарком до минимума, необходимого для выполнения проекта программного обеспечения.

Например

Presenter.SetListTitle MyList.Name
For I = View.MyListStart to View.MyListEnd
   Presenter.AddListItem MyList(I)
Next I
Presenter.ShowListAddBUtton
Presenter.ShowListDelButton

Должен быть размещен в презентере, как показано ниже

Public Sub UpdateWithList(MyList as AList, View as AView)
  Me.SetListTitle MyList.Name
  For I = View.MyListStart to View.MyListEnd
     Me.AddListItem MyList(I)
  Next I
  Me.ShowListAddBUtton
  Me.ShowListDelButton
End Sub

Позже, если вы решили изменить свой пользовательский интерфейс, все, о чем вам следует беспокоиться, это реализовать UpdateWithList, а не SetListTitle, AddListItem и т. Д. И т. Д. И т. П.

...