2016-05-21 17 views
5

Si consideri il seguente pseudo codice che implementa il pattern MVP:MVP disegno del modello best practice

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

Ed ecco un'implementazione alternativa di modello 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(); 
    } 
} 

che uno è più corretta attuazione del MVP modello? Perché?

+0

Codice recensione potrebbe essere un posto migliore per questa domanda, si otterranno alcune buone risposte lì: http://codereview.stackexchange.com/ –

+0

@Jezzabeanz ha bisogno di codice reale per questo però, non pseudocodice. – Riker

+0

Come potrei chiedere un parere senza chiedere un parere? – CarlLee

risposta

2

mia breve risposta:

Direi che il primo.

La mia risposta lunga:

Fondamentalmente MVP ha due varianti: Passive View e Supervisione Presenter

Le classi pseudo crea un'implementazione di Passive View.

Per vedere la differenza: Please check the first answer here. Descrive loro e la differenza tra loro perfettamente, quindi penso che non è necessario copiare qui il contenuto.

Motivo della mia risposta:

idea principale di Passive View per avere la vista come muto possibile. Semplicemente notifica al suo presentatore quando è stata eseguita un'azione dell'utente e espone accessors e mutator per ottenere e impostare valori da/sulla GUI. Tutto ciò viene fatto per ottenere la massima testabilità a livello di vista.

In base a ciò, la vista non dovrebbe sapere che dovrebbe fornire il valore dalla casella di testo di input quando viene premuto il pulsante. Dovrebbe solo notificare al presentatore che il pulsante è premuto ed esporre i getter per il relatore per raccogliere qualsiasi input dell'utente che desidera.