Pregunta

Estoy tratando de entender cómo usar pasiva Vista correctamente. Me parece que todos los ejemplos que miran en Passive Ver rompe la Ley de Demeter:

//In the presenter code
myview.mytextfield.text = "whatever";

¿Cuál es la mejor aplicación de Pasivo View?

¿Fue útil?

Solución

En primer lugar, la Ley de Demeter, como la mayoría de las reglas de programación, es más de un principio o directriz y hay ocasiones en las que el principio no se aplica. Dicho esto, la Ley de Demeter no se aplica realmente a Pasivo Ver , porque la razón de la ley no es un problema en este caso.

La Ley de Demeter está tratando de prevenir la dependencia encadenamiento tales como:

objectA.objectB.objectC.DoSomething();

Es evidente que si los cambios de implementación de objectB a utilizar objectD entonces se romperá la dependencia de Objecta y causar un error de compilación. Si llevada al extremo que terminan haciendo la cirugía escopeta cualquier momento la cadena se ve perturbado por un cambio de aplicación.

En el caso de Pasivo Ver

  • El presentador depende de una interfaz para la aplicación de la vista puede cambiar, siempre y cuando la interfaz sigue siendo la misma.
  • La vista general expone propiedades como tipos de datos generalizados tales como los tipos y colecciones sistema. Esto le permite realizar cambios en la interfaz de usuario sin afectar el presentador.
  • Para el presentador de la vista aparece como nada más que una estructura de datos, un lugar para recuperar y volcado de datos. Desde el punto de vista es bastante simple, el presentador ni siquiera debería ser capaz de hacer el encadenamiento de dependencia.

Así que el ejemplo que diste normalmente se llevaría a cabo:

//from presenter
view.MeaningfulName = "data";

Mientras que la vista sería algo como:

//from view
public string MeaninfulName
{
    get
    {
        return someControl.text;
    }
    set
    {
        someControl.text = value;
    }

Espero que esto aclara un poco las cosas.

Otros consejos

Una mejor aplicación sería tener una API entre el presentador y la vista. El presentador empujaría datos a su Visión a través de un método único (definido en la interfaz de la vista). La vista administraría la nueva entrada de acuerdo con una lógica interna.

Por lo tanto, el presentador no tiene que saber nada acerca de la vista y la Ley de Demeter es seguro.

De acuerdo, bueno, sí, que hace romper la Ley de Demeter, que básicamente dice que la interfaz a un objeto no debe revelar la implementación del objeto. Pero entonces, la segunda da una gran cantidad de consejos cojonudo a la aplicación también.

Creo que es hora de preguntarse si tiene la interfaz correcta en general. Lo que son estos campos de texto? ¿Quién los está poniendo en la vista? no debe ser el punto de vista pidiendo al modelo de datos, en lugar de viceversa?

Tal vez se necesita el patrón Observer -. El modelo mantiene una lista de las partes interesadas y les notifica cuando cambia su estado interno


Ah, que Ver pasiva. No había mirado que en mucho tiempo. Básicamente, veo dos partes: una de ellas es que al hacer que el controlador (no el modelo) a impulsar todos los cambios, por (creo) la eficiencia que expone los métodos de campo específicos para actualizar esos campos. Esto hace violar la Ley de Demeter, que es, después de todo, sólo una "ley" en un sentido metafórico, al igual que la ley de Murphy. Por lo general, es una buena idea, sin embargo. En este caso, me gustaría hacer de nuevo la vista y lo uso como una fachada para envolver los cambios en el campo individual.

No es necesario el patrón de observador sin embargo, porque ahora usted tiene el controlador de hacer todas las actualizaciones. Se añade un poco de complejidad y el error de la propensión al código general, porque ahora hve para escribir el controlador para hacer cambios paralelos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top