2016-05-21 2 views
5

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

interface Presenter { 
    void onSendClicked(); 
} 

interface View { 
    String getInput(); 
    void showProgress(); 
    void hideProgress(); 
} 

class PresenterImpl implements Presenter { 
    // ...ignore other implementations 
    void onSendClicked() { 
     String input = view.getInput(); 
     view.showProgress(); 
     repository.store(input); 
     view.hideProgress(); 
    } 
} 

class ViewImpl implements View { 
    // ...ignore other implementations 
    void onButtonClicked() { 
     presenter.onSendClicked(); 
    } 

    String getInput() { 
     return textBox.getInput(); 
    } 

    void showProgress() { 
     progressBar.show(); 
    } 

    void hideProgress() { 
     progressBar.hide(); 
    } 
} 

А вот альтернативная реализация MVP шаблона:

interface Presenter { 
    void saveInput(String input); 
} 

interface View { 
    void showProgress(); 
    void hideProgress(); 
} 

class PresenterImpl implements Presenter { 
    // ...ignore other implementations 
    void saveInput(String input) { 
     view.showProgress(); 
     repository.store(input); 
     view.hideProgress(); 
    } 
} 

class ViewImpl implements View { 
    // ...ignore other implementations 
    void onButtonClicked() { 
     String input = textBox.getInput(); 
     presenter.saveInput(intput); 
    } 

    void showProgress() { 
     progressBar.show(); 
    } 

    void hideProgress() { 
     progressBar.hide(); 
    } 
} 

Какой из них более правильная реализация MVP шаблон? Зачем?

+0

Обзор кода может быть лучшим местом для этого вопроса, вы получите хорошие ответы там: http://codereview.stackexchange.com/ –

+0

@Jezzabeanz ему нужен настоящий код для этого, хотя и не псевдокод. – Riker

+0

Как я могу просить мнение, не спрашивая мнения? – CarlLee

ответ

2

Мой короткий ответ:

Я бы сказал первый.

Мой длинный ответ:

В основном MVP имеет два варианта: Passive View и Контроль Presenter

Ваши псевдо-классы создает реализацию пассивного View.

Чтобы посмотреть разницу: Please check the first answer here. Он описывает их и разницу между ними отлично, поэтому я думаю, что не нужно копировать здесь контент.

Причина моего ответа:

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

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

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