Правильное направление сдерживания в MVP? - PullRequest
0 голосов
/ 31 марта 2012

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

Как следует из названия:

public MyPresenter(){
   display = new MyView(this);
}

или как моя вменяемая логика (и wikipedia страница о MVP)

public MyView(){
   presenter = new MyPresenter(this);
}

или я должен использовать совершенно другой подход к созданию этих объектов?

Ответы [ 2 ]

5 голосов
/ 31 марта 2012

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

Именно поэтому я бы рекомендовал в качестве практического правила попытаться повторно использовать ваши представления (сделать их одиночными или кэшировать их).на несколько минут) для многих докладчиков.

Это означает, что ваш (недолговечный) докладчик должен ссылаться на ваше (долгоживущее) представление.

Я твердо верю в внедрение зависимостей,так что я бы не стал создавать экземпляр одного из другого.Это очень помогает в управлении временем жизни компонентов, каждый из которых независим от других.
Таким образом, вы бы внедрили свое представление в докладчик: создайте докладчик, выберите представление (либо создайте его, либо получите из своего кэша )) и отдайте его своему докладчику.Затем вы уничтожите докладчика и сохраните вид для повторного использования в следующий раз, когда он вам понадобится (с другим докладчиком).

2 голосов
/ 03 апреля 2012

Одна из основных причин использования шаблона MVP состоит в том, чтобы изолировать свою логику в Presenter, чтобы она могла быть проверена модулем.

Если вы сделаете это:

public MyPresenter(){
   display = new MyView(this);
}

Вы будетене сможет выполнить модульное тестирование вашего докладчика без расширения GWTTestCase, что является медленным.Поэтому я очень предпочитаю:

 public MyPresenter(MyViewInterface view){
     this.view = view;
 }

Где MyView реализует MyViewInterface.Интерфейс может быть подключен к реальной реализации MyView или к тестовой реализации, которая не требует запуска контекста GWT для тестирования.

...