2010-07-22 5 views
15

Я делаю первые шаги с GWT. У меня вопрос после прочтения:MVP: Должен ли View реализовать интерфейс презентатора или наоборот?

В первом примере Presenter определяет интерфейс для View.

public class ContactsPresenter implements Presenter { 
    ... 
    public interface Display extends HasValue<List<String>> { 
    HasClickHandlers getAddButton(); 
    HasClickHandlers getDeleteButton(); 
    HasClickHandlers getList(); 
    void setData(List<String> data); 
    int getClickedRow(ClickEvent event); 
    List<Integer> getSelectedRows(); 
    Widget asWidget(); 
    } 
} 

А во втором, то View определяет интерфейс для Presenter.

public interface ContactsView<T> { 

    public interface Presenter<T> { 
    void onAddButtonClicked(); 
    void onDeleteButtonClicked(); 
    void onItemClicked(T clickedItem); 
    void onItemSelected(T selectedItem); 
    } 

    void setPresenter(Presenter<T> presenter); 
    void setColumnDefinitions(List<ColumnDefinition<T>> columnDefinitions); 
    void setRowData(List<T> rowData); 
    Widget asWidget(); 
} 

Какова идея этой разницы?

Какой должен выбрать?

+2

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

+0

@Abhijeet Kashnia: Это два разных примера. Проверьте ссылки, они делают то же самое, но они реализованы по-разному. – Macarse

+0

Даже в управлении историей с Activity и Places и MVP у нас есть активность, реализующая интерфейс просмотра! Как это MVP? –

ответ

2

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

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

0

Во втором учебном курсе код был изменен на использование интерфейса Presenter (определенного в представлении) для размещения с использованием общих средств UiBinders и Java. Я думаю, что интерфейс Presenter был перемещен в интерфейс View, так как они оба имеют один и тот же общий T.

2

@deepak это действительные проблемы. Word - это реализация заражения, а не определение.

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

Вещи запутаны во втором примере. Где Presenter не имеет контроля над тем, что должно быть реализовано. Это не MVP, а google называет его MVP. При таком подходе вы не можете тестировать представления с помощью JRE/unit tests. Это не делает это плохо, хотя просто не MVP и Google не должны называть этот MVP, или они должны объяснить, почему это MVP?

@ Saket Bansal, разделяющий интерфейс, является неправильным подходом. Это приведет к сложному поддержанию кода по мере роста приложения.

По моему мнению, вы можете принять любой подход, я помню, как Google говорил, где кто-то работал над ними для adwords и второй для волны.

Любой, как вы должны также смотреть на framworks как GWTP или ERRAI от JBoss

 Смежные вопросы

  • Нет связанных вопросов^_^