2016-05-21 37 views
5

Rozważmy następujący pseudo kod, który implementuje wzorzec MVP:MVP wzornictwo najlepszych praktyk

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(); 
    } 
} 

A oto alternatywa implementacja MVP wzoru:

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(); 
    } 
} 

Który z nich jest bardziej poprawna implementacja MVP wzór? Czemu?

+0

Przegląd kodu może być lepszym miejscem na to pytanie, dostaniesz tam kilka dobrych odpowiedzi: http://codereview.stackexchange.com/ –

+0

@Jezzabeanz potrzebuje prawdziwego kodu, ale nie pseudokodu. – Riker

+0

Jak mogę poprosić o opinię bez pytania o opinię? – CarlLee

Odpowiedz

2

Moja krótka odpowiedź:

powiedziałbym pierwszy.

Moja długa odpowiedź:

Zasadniczo MVP ma dwa warianty: Zobacz Pasywny i Nadzorowanie Presenter

klasach pseudo tworzy implementację Passive View.

Aby zobaczyć różnicę: Please check the first answer here. Opisuje je i różnicę między nimi doskonale, dlatego uważam, że nie ma potrzeby kopiowania tutaj treści.

Powód moją odpowiedź:

Ideą Passive View, aby mieć pogląd taki głupi, jak to możliwe. Po prostu informuje swojego prezentera, gdy wykonano jakąś czynność użytkownika i ujawnia dostęp i mutatory, aby uzyskać i ustawić wartości z/na GUI. Wszystko to ma na celu osiągnięcie maksymalnej testowalności na poziomie widoku.

Na tej podstawie widok nie powinien wiedzieć, że powinien podawać wartość z pola tekstowego, gdy przycisk zostanie naciśnięty. Powinien po prostu powiadomić prezentera, że ​​przycisk jest wciśnięty i odsłonić moduły pobierające dla prezentera, aby zebrać wszelkie dane wejściowe użytkownika, które chce.