MVP - DAGGER (Login)

En este post crearemos un login básico, usando MVP y Dagger, recordamos que el en post anterior indicamos como configurar nuestro proyecto con dagger para más información haz clic aquí

Lo primero que haremos en nuestro layout agregaremos dos EditText y un button nuestra vista quedaría como se muestra a continuación.


A continuación vamos a crear un paquete login, donde crearemos nuestras clases para aplicar nuestro patrón MVP


Crearemos una interface llamada LoginMVP, acá vamos a crear tres interfaces una View, Presenter y un Model, recordemos que el presentador será el intermediario entre la vista y el modelo



Antes de todo vamos a crear un paquete modelo y crearemos una clase llamada User

public class User {

    private String user;    private String nombre;
    public User(String user, String nombre){
        this.user = user;        this.nombre = nombre;    }
}

hemos creado estos métodos iniciales para el manejo de nuestro login, lo primero que haremos es implementar nuestra vista, para ello, nos vamos a ir a nuestra actividad, en este caso main_activity e implementamos los métodos establecidos. Nuestra clase activity quedaría de esta forma


en los métodos de nuestra actividad, devolveremos los valores de cada EditText y creamos un método donde mostraremos mensajes de la validación de nuestro login.

Nuestro siguiente paso es trabajar sobre nuestro presentador, para este caso vamos a crear una clase llamada LoginPresenter el cual implementara la interface Presenter, por lo pronto nuestra clase irá de esta forma, mientras vayamos implementando nuestro modelo vamos agregando el resto de funcionalidad. En nuestro método signIn, primer verificamos que nuestra vista no venga nula, después validamos que nuestro campos no estén vacío, en caso de ser verdadero llamamos nuestro Toast que esta implementando en la vista y pasamos un mensaje indicando que debe ingresar las credenciales.



Ahora seguiremos con nuestro modelo, para este caso vamos a crear primero un Repository, que tendrá como funcionalidad acceder ya sea a un webservice o una información de datos locales, para este caso sólo simularemos una validación.

Primero creamos una interface llamada LoginRepository, para este ejemplo contendrá un método que verifica las credenciales del usuario que desea iniciar sesión

public interface LoginRepository {
    User getUser(String user, String password);}


Después creamos la clase que implementa la cual llamamos LoginRepositoryImpl, en esta clase hemos realizado una validación "dummy", sobre los datos de inicio de sesión


Ahora seguiremos con nuestra implementación del modelo, en nuestro modelo haremos la inyección de dependencia de nuestro Repository. Hacemos llamado de nuestro metodo getUser, creado en el repository el cual nos devolvera un null o un objecto de tipo User.


Ya teniendo creado nuestro modelo, vamos a hacer la inyección de dependencia sobre el presenter, el cual nos quedaría de esta forma

public LoginPresenter(LoginMVP.Model model){
    this.model = model;
}


y sobre el presentador en el método signIn, haremos del método del modelo que válida las credenciales
public void signIn() {
    if(view != null ){
        if(TextUtils.isEmpty(view.getUser()) && TextUtils.isEmpty(view.getPassword())){
            view.setMessage("Ingrese usuario y contraseña");        }else{
           User user = model.validateLogin(view.getUser(), view.getPassword());
           view.setMessage(user == null ? "Usuario no válido" : "Login válido");
} } }


A continuación lo que haremos es crear nuestro Modulo, con dagger, y realizamos la implementación de nuestro MVP, para esto vamos a crear una clase llamado LoginModule


Después de haber creado nuestro módulo dagger, vamos a registrarlo en nuestra clase Component, ubicada en el paquete config, luego compilamos nuestro proyecto y una vez terminado vamos a nuestra clase App, y agregamos nuestro modulo.


Nos saldrá en esto momento que es deprecated, pero esto es debido a que no se esta usando, para esto vamos hacer nuestra inyección sobre nuestra actividad MainActivity.

Lo primero que haremos es agregar un objecto de tipo LoginPresenter y haremos la inyección

@InjectLoginMVP.Presenter presenter;

Sobrescribimos el método onStart y establecemos la vista a nuestro presentador

@Overrideprotected void onStart() {
    super.onStart();    presenter.setView(this);}

En nuestro método Oncreate llamamos a nuestro componente e inyectamos nuestra actividad

((App)getApplication()).getComponent().inject(this);

en nuestro evento clic listener de nuestro botón hacemos el llamado del método login del presentador

buttonSignIn.setOnClickListener(view -> 
    presenter.signIn()
);

Compilamos nuestro proyecto y vemos que en nuestra clase App, no tenemos un mensaje de deprecated.

Ahora iniciemos nuestro aplicación, y realizamos las diferentes validaciones.

En este ejemplo logramos implementar MVP y DAGGER, teniendo en cuenta la finalidad, que el presentador sea nuestro puente entre el módelo y la vista, el modelo se encargará de toda nuestra lógica de negocio, mientras que la vista, manejara los componentes visuales de la aplicación.


Descargar fuentes




  


Publicar un comentario

0 Comentarios