Red de conocimiento informático - Material del sitio web - Cómo implementar el visor usando la arquitectura MVP

Cómo implementar el visor usando la arquitectura MVP

El significado correspondiente de MVP: M-Model-model, V-View-view, P-Presenter-presenter.

Vista

La vista generalmente se implementa mediante Actividad y la Vista de fragmento contendrá una o más referencias del Presentador para satisfacer la lógica empresarial de la vista. La interacción entre Vista y Presentador es bidireccional, es decir, la capa Vista puede llamar a los métodos lógicos del Presentador y el Presentador también puede controlar la visualización de la Vista.

Presentador

Como puente entre el Modelo y la Vista, el Presentador es responsable de obtener datos del Modelo, procesarlos y devolverlos a la Vista. Sin embargo, la comunicación entre el Presentador y las otras dos capas se realiza a través de protocolos de interfaz, por lo que cada Presentador suele contener uno o más protocolos de interfaz.

El modelo, al igual que MVC, sirve como almacén de datos y solo es responsable de procesar los datos de la aplicación. Los ejemplos en la práctica del modelo MVP de desarrollo de Android dividen la aplicación en las siguientes cuatro capas.

Entidades: Clases empresariales en APP. Casos de Uso: Responsable de procesar y empaquetar datos de Entidades. Presentadores: obtienen datos procesados ​​de

casos de uso y luego proporcionan los datos apropiados a la interfaz de usuario de acuerdo con la lógica de demanda. UI: obtenga datos finales procesados ​​de los presentadores e interactúe directamente con los usuarios.

El principio de estas cuatro capas de diseño es que las llamadas de código solo pueden expandirse desde el círculo exterior al círculo interior. El círculo interior no puede interferir y no necesita preocuparse por la lógica funcional del círculo exterior. Esto está en línea con la idea de MVP: los casos de uso y los presentadores separan las entidades y la interfaz de usuario, de modo que las entidades y la interfaz de usuario solo necesitan preocuparse por su propia lógica y el procesamiento de datos queda completamente a cargo. las otras dos capas.

Aquí, algunos estudiantes pueden tener preguntas: ¿por qué los Presentadores acordados tienen

Casos de Uso que interrumpen la situación? De hecho, este es también el propósito de elegir este proyecto como ejemplo. He leído muchos artículos de MVP, todos los cuales hablan sobre cómo el Presentador interactúa con las otras dos capas a través del protocolo de interfaz, pero la mayoría ignora la estructura de. la capa del Presentador en sí, porque solo aplican el modelo MVP. Aunque reduce el acoplamiento de la Vista hasta cierto punto, debido a que el Presentador no solo procesa datos sino que también controla la interacción de la interfaz de usuario según los requisitos, es probable que haya redundancia en la lógica del Presentador. que ocurra. El siguiente proyecto de ejemplo engloba los casos de uso

entre Presenter y el modelo, y entrega el procesamiento de lógica de datos a los casos de uso, lo que permite a Presenter centrarse más en la interacción de la interfaz de usuario.

NO1. Cree una nueva interfaz de visualización pública ***: /** *?Creada?por?Bluesky?el?2015/8/27 *?La interfaz pública *** de la capa V. en MVP* /

public?interface?IView?{

public?void?showProgressPar();

public?void?hideProgressPar();

public?void?showError(Object?o);

}

La vista hereda la interfaz pública ***IView/** *?Creado?por?Bluesky ?el?2015/8/27. *?Iniciar sesión Ver interfaz*/

public?interface?ILogin?extends?IView?{ public?void?showSuccess(Object?o);

}

La implementación de NO2 y VIew.

Es decir, Actividad implementa la interfaz ILogin: /** *Página de inicio de sesión Actividad */

public?class?MainActivity?extends?Activity?implements?ILogin?{

private?LoginPresenter ?mPresenter ;

privado?Usuario?mUser;

privado?ProgressDialog?mDialog;

@Override

protegido?void?onCreate (Paquete ?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mPresenter?=?new? LoginPresenter( this);

mUser?=?new?User();

initVIew();

}

¿privado? ¿void? initVIew()?{

final?EditText?pwd?=?(EditText)?findViewById(R.id.pwd);

final?EditText?name?=? (EditText )?findViewById(R.id.name);

Button?loginBtn=?(Button)?findViewById(R.id.login_btn);

loginBtn.setOnClickListener(new ?Ver .OnClickListener()?{

@Override

public?void?onClick(View?view)?{

mUser.setName(nombre.getText () .toString());

mUser.setPassword(pwd.getText().toString());

mPresenter.login(mUser);

}

});

}

@Override

¿público?boolean?onCreateOptionsMenu(¿Menú?menú)?{

//?Inflar?el?menú;?esto?agrega?elementos?a?la?barra?de?acciones?si?está?presente.

getMenuInflater().inflate( R. menu.menu_main,?menu);

return?true;

}

@Override

public?boolean?onOptionsItemSelected (MenuItem?item)?{

//?¿Maneja?barra de acciones?¿elemento?hace clic?aquí.?La?barra?de?acciones?

//?manejará automáticamente ?hace clic en el botón Inicio/Arriba durante un tiempo prolongado

//?mientras?especifique?una?actividad?principal?en?AndroidManifest.xml.

int?id?=?elemento

.getItemId();

//noinspection?SimplifiableIfStatement

if?(id?==?R.id.action_settings)?{

return?true ;

}

return?super.onOptionsItemSelected(item);

}

@Override

público ?void?showSuccess(Object?o)?{

Usuario?user=?(Usuario)?o;

Toast.makeText(this,"Mensaje de inicio de sesión exitoso:"+usuario .getName()+"?/"+user.getPassword(),Toast.LENGTH_LONG).show();

}

@Override

público ?void?showProgressPar()?{

mDialog?=?new?ProgressDialog(MainActivity.this);

mDialog.setMessage("Cargando...");

p>

mDialog.show();

}

@Override

public?void?hideProgressPar()?{

mDialog.hide();

}

@Override

public?void?showError(Object?o)?{

Toast.makeText(this,"Exception:"+((Exception)o).getMessage(),Toast.LENGTH_LONG).show();

}

}

Diseño XML de la actividad:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/hello_world"/>

android:id="@+id/name"

Android :layout_width="match_pare

nt"

android:layout_height="wrap_content"

android:hint="Ingrese su nombre de usuario"

/>

< Editar texto

android:id="@+id/pwd"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="Por favor, introduce tu contraseña"

/>

android:id="@+id/login_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Iniciar sesión"/>

No3. Cree un nuevo LoginPresenter. Estamos programando para interfaces, por lo que no hay ningún método en la demostración para crear una interfaz de Presenter.

interfaz del presentador/** *?Creado?por?Bluesky?el?27/8/2015 *?P capa en MVP*/

interfaz?pública?Presentador?{

}

Inicie sesión en el presentador para implementar la interfaz del presentador, donde los puentes de las capas Vista y Modelo están conectados, se realiza la programación comercial y desempeña un papel de mando/** *?Creado?por?Bluesky ?el?2015/8/27 . */

público?clase?LoginPresenter?implements?Presenter?{

privado?ILogin?mLoginView;

privado ?ILoginBiz?mLoginBiz;

privado?Handler?mHandler?=?new?Handler();

público?LoginPresenter(ILogin?mLoginView)?{

this.mLoginView?=?mLoginView;

this.mLoginBiz?=?new?LoginBizImpl();

}

/** *?Iniciar sesión* * ?@param?o */

public?void?login(Object?o)?{

mLoginView.showProgressPar();

mLoginBiz.login( o,?new?Listener() ?{

@Override

public?void?complete()?{

mHandler.post(new?Runnable( )?{

@Override

public?void?run()?{

mLoginView.hideProgressPar();

}

}) ;

}

@Override

public?void?onSuccess(final?Object?o)?{

mHandler.post( new?Runnable()?{

@Override

public?void?run()?{

mLoginView.showSuccess (o);

}

});

}

@Override

¿público?void? onFailed(final?Exception?e)?{

mHandler.post(new?Runnable()?{

@Override

public?void?run( )?{

mLoginView.showError(e);

}

});

}

});

}

}

No4, la capa Modelo realiza el procesamiento de lógica de negocios. Cree una nueva interfaz de capa de modelo y luego implemente el procesamiento de lógica de negocios, el procesamiento asincrónico y la comunicación entre subprocesos y subprocesos principales.

interfaz del modelo: /** *?Creado?por?Bluesky?el?27/8/2015 */

interfaz?pública?ILoginBiz?{

public?void?login. (Objeto?o,Listener?listener);

}

Implementación del modelo: /** *?Creado?por?Bluesky?el?2015/8/27 */<. /p>

¿clase?pública?LoginBizImpl?implementos?ILoginBiz?{

@Override

público?void?login(Objeto?o,?final?Listener?listener) ?{

final?Usuario?usuario?=?(Usuario)?o;

¿nuevo?Hilo(nuevo?Ejecutable()?{

@Override

public?void?run()?{

¿intentar?{

Thread.sleep(2?*?1000);

}?catch?(InterruptedException?e)?{

e.printStackTrace();

}

listener.complete();

if?(user.getName().equals(user.getPassword()))?{//Éxito

listener.onSuccess(usuario);

}?else ?{//Failed

listener.onFailed(new?Exception("Excepción en ejecución..."));

}

}

}).start();

}

}

Clase de entidad: /** *?Creado?por?Bluesky?en?2015 /8/27. */

¿Clase?pública?¿Usuario?implementos?Serializable?{

¿Cadena?privada?nombre;

¿Cadena?privada?contraseña. ;

público?String?getPassword()?{

return?contraseña;

}

público?void?setPassword(String ?contraseña)?{

esta.contraseña?=?contraseña;

}

¿pública?String?getName()?{

return?name;

}

public?void?setName(String?name)?{

este.nombre?=?name;

}

}

Interfaz de devolución de llamada: /** *?Creado?por?Bluesky?el?2015/8/27 */

¿pública?interfaz?Listener?{

pública?void?complete();

pública?void?onSuccess(Object?o);

pública? void?onFailed(¿Excepción?e);

}

上篇: ¿Cuáles son las señales de que una mujer ama a un hombre? 1. Se volverá más fuerte y no le causará demasiados problemas. 2. Se le culpará ligeramente por concentrarse en el trabajo, no saber descansar y no saber cuidar de sí mismo. 3. Que no se preocupe cuando esté angustiado y trate de compartir todo con él. 4. Estaré triste por él y no le diré nada por doloroso que sea. 5. No lo culpes por descuidarte, todo estará bien. Ella estará muy feliz, porque ver su bondad y sufrimiento también es señal de que una mujer ama a un hombre. 2 Leí las palabras de San Mao y siempre quedaron grabadas en mi corazón. "Cuando la gente vive en el mundo, lo más importante es la capacidad de amar a los demás, en lugar de ser amado. No sabemos cómo se ama a los amantes. En los tiempos modernos, muchas personas se dejan influenciar por visiones externas del amor y gradualmente". olvida qué tipo de amor necesitan. Se recomienda que cuando conozcas a un hombre que te ame y a un hombre al que ames, elijas el primero y tu vida será mucho mejor. De hecho, varía de persona a persona. Puedes engañar a todos, pero no puedes engañarte a ti mismo basándose en tus sentimientos. El amor en sí no puede evitar hacer que la gente se sienta feliz, pero si te enfrentas a alguien a quien no amas todos los días, por muy bueno que sea, sólo te hará sentir más miserable. Enamorada, el amor de una mujer por un hombre no puede evitar sentir lástima por él y, sin darse cuenta, revelará todo su amor. Jin Hao conoció a He Qing por casualidad. Ese día, Jin Hao salió a comprar vino y fue golpeado por He Qing. La botella de vino se rompió y He Qing, a toda prisa, dejó caer el vino de WeChat y se escapó. Más tarde, las dos personas hablaron sobre su relación en WeChat y poco a poco comenzaron a conocerse y jugar. No mucho después, He Qing se enteró de que Jin Hao sufría de depresión y había estado tomando medicamentos. He Qing no tenía miedo, sino que estaba lleno de amor. Cuando está con Jin Hao, le gusta abrazarlo, decirle palabras de amor reconfortantes, actuar con coquetería e instar a Jin Hao a tomar medicamentos. Los medicamentos para tratar la depresión son realmente caros, pero a He Qing no le importa en absoluto. Incluso escondió en secreto el dinero en la casa de Jin Hao y fingió limpiarlo, sonriendo felizmente a Jin Hao. Jin Hao, que no había visto el sol durante mucho tiempo, de repente sintió que el mundo estaba muy cálido en ese momento, y poco a poco estaba aprendiendo a mejorar y quería darle a He un hogar completo y feliz. No hay obstáculos para el amor verdadero. Dos personas que se aman se unirán hasta el final, solo para estar juntas. Una mujer puede pensar todo en ti, preocuparse por tu cuerpo y no preocuparse por nada más. La salud es la capital de la revolución y sólo la salud tiene futuro. Todo el mundo lo sabe y las personas que realmente se preocupan por ti se aprovecharán de ello. Al igual que muchas ancianas siempre instan a sus parejas a beber y fumar, pidiéndoles que beban menos y dejen de fumar. Todos estos comportamientos son expresiones de amarte. Las personas que te aman te controlarán y querrán que mejores. Creo que incluso si dices algo, te sentirás muy triste cuando lo escuches, pero sus ojos te conmoverán un poco. Siento pena por lo que pasó. No existe la verdadera empatía en este mundo. Todo el alivio y la angustia que se puede expresar son sólo superficiales, al igual que la aguja no está clavada en tu mano, sino que has estado imitando el dolor. Incluso alguien que te ama no sentirá lo mismo, pero su cuidado y amor provienen del fondo de su corazón. Recuerdo el amor entre Tong Xiangyu y Bai Zhantang en "Wulin Gaiden". Después de que Tong conoció a Lao Bai, el comerciante quiso dejarlo y le dijo "Te necesito", y los dos desarrollaron sentimientos gradualmente en la posada. El comerciante Tong se dio cuenta de que Lao Bai realmente quería cambiar de opinión y estaba trabajando duro. Después de experimentar muchas cosas, recurría a Lao Bai y sentía lástima por él desde el fondo de su corazón. Cuando todos supieron que Lao Bai estaba robando al santo, él se mantendría al margen y hablaría por él sin dudarlo. Cuando Lao Xing quiso llevarse a Lao Bai, también se puso de pie para protegerlo. No hay nada bueno o malo en el amor, pero tú eres el mejor a mis ojos. Lo que pasó eventualmente pasará. Puedo ver tu determinación de afrontar el pasado con valentía y vivir duro. Suficiente. Puedo sentir pena por todas tus experiencias anteriores, pero estoy dispuesto a acompañarte hasta el final de tu vida futura. Sentir pena por la experiencia de la otra persona es a menudo un signo de voluntad de pasar el resto de la vida tratando de curar el mal humor de la otra persona. Más importante aún, es un deseo de acompañar a la otra persona a través del pasado y abrazar un futuro mejor. El amor requiere angustia, porque cuando sentimos angustia el uno por el otro, esto toca nuestra perspectiva interior y nuestro amor surgirá naturalmente. Todo el que se preocupa por su dinero pensará que hablar de dinero en el amor es una cosa muy vulgar en la vida, pero esta "cosa vulgar" la usamos nosotros para medir el amor, e incluso es lo que siempre predicamos. En una palabra: ser Pobre y superficial son dos cosas diferentes. Entonces tengo curiosidad. Es un hecho que la pobreza puede ser un regalo para las minorías. Si estos nichos no están dentro de su rango aceptable, ¿se desperdiciará el dinero? En otras palabras, todos los obsequios requieren tiempo, esfuerzo y dinero, ya sean ricos o pobres. Las niñas pueden regalar productos hechos a mano o pasteles que ellas mismas hayan hecho. ¿Pueden estas personas hacerlo? Tiene tiempo para hacer el trabajo y su negocio ha aumentado. Todavía recuerdo a Zhu Xia en "El hombre más rico de la ciudad de Xihong". Ella seguía diciendo que no le importaba el dinero, pero Wang Duoyu no se conmovió ni por un momento. 下篇: El juego móvil de parkour favorito de las niñas