Skip to content

Latest commit

 

History

History
122 lines (94 loc) · 3.36 KB

mvp-example.md

File metadata and controls

122 lines (94 loc) · 3.36 KB

Utilizando MVP - Model View Presenter

ExampleMVP.java

public interface ExampleMVP {
    public interface PresenterOps {
        // Presenter methods => View acess
        void doSomething();
    }
    
    public interface ModelOps {
        // Model methods => Presenter acess
        void catchSomething();
    }
    
    public interface ReqPresenterOps {
        // Presenter methods => Model acess
        void returnSomething();
    }
    
    public interface ReqViewOps {
        // View methods => Presenter acess
        void showSomething();
    }
}

ExampleActivity.java

// Package and imports

public class ExampleActivity extends AppCompatActivity implements ExampleMVP.ReqViewOps {
    private ExampleMVP.PresenterOps presenterOps;
    
    protected void onCreate( .. ) {
        // ...
        presenterOps = new ExamplePresenter(this);
        presenterOps.doSomething();
    }
    
    // Implement methods of ExampleMVP.ReqViewOps
    
    @Override
    public void showSomething() {
    
    }
}

ExamplePresenter.java

// Package and imports

public class ExamplePresenter implements ExampleMVP.PresenterOps, ExampleMVP.ReqPresenterOps {
    private ExampleMVP.ReqViewOps reqViewOps;
    private ExampleMVP.ModelOps modelOps;
    
    public ExamplePresenter(ExampleMVP.ReqViewOps reqViewOps) {
        this.reqViewOps = reqViewOps;
        this.modelOps = new ExampleModel(this);
    }
    
    // Implement methods of ExampleMVP.PresenterOps
    
    @Override
    public void doSomething() {
        modelOps.catchSomething();
    }
    
    // Implement methods of ExampleMVP.ReqPresenterOps
    
    @Override
    public void returnSomething() {
        reqViewOps.showSomething();
    }
}

ExampleModel.java

// Package and imports

public class ExampleModel implements ExampleMVP.ModelOps {
    private ExampleMVP.ReqPresenterOps reqPresenterOps;
    
    public ExampleModel(ExampleMVP.ReqPresenterOps reqPresenterOps) {
        this.reqPresenterOps = reqPresenterOps;
    }
    
    // Implement methods of ExampleMVP.ReqPresenterOps
    
    @Override
    public void catchSomething() {
        reqPresenterOps.returnSomething();
    }
}

Entendendo o fluxo

A Activity (View) instancia ExamplePresenter para receber os métodos da ExampleMVP.PresenterOps e assim consegue chamar o método doSomething().

A Presenter por sua vez recebe como parâmetro no construtor uma referência pra Activity para posteriormente chamar os métodos da ExampleMVP.ReqViewOps e instancia ExampleModel para receber os métodos da ExampleMVP.ModelOps. Após a Activity chamar o método da presenterOps este chama o método catchSomething() responsável por capturar informações no banco de dados.

A Model recebe como parâmetro no construtor uma referência para a Presenter para receber os métodos da ExampleMVP.ReqPresenterOps. Feito as capturas requisitadas no banco de dados, este chama o returnSomething() que vai tratar os retornos trazidos pelo método da ExampleMVP.ModelOps.

Voltando para a Presenter, estamos na função returnSomething() que no final, após realizar os devidos ajustes, irá chamar o showSomething() para mostrar os resultados na Activity.

Organização

activity

  • example
    • ExampleActivity
    • ExamplePresenter
    • ExampleModel
    • ExampleMVP