Estamos tratando de averiguar la validación en el mvvm haciendo la validación en la lógica o modelo de negocio. He implementado la validación según el tipo de excepción en nuestra lógica de negocio - un esquema simplificado se puede encontrar aquí: MVVM - Validación
Si tenemos mucho de la de los insumos que son independientes entre sí, no hay problema, el se lanza una excepción, el cuadro de texto lo atrapa y marca las fronteras rojas para cada entrada incorrecta. Sin embargo, cuando tenemos valores dependientes, tenemos problemas. p.
Valor1 y Valor2 en el modelo no debe ser el mismo, así que tenemos una función de validación en cada uno de aquellos que buscan el valor iguales y lanzar una excepción si eso sucede
ahora, si establecemos Value1 en 0 y Value2 en 1 todo está bien
El valor 1 se establece en la GUI para 1 -> este se marca en rojo, porque la validación de los otros valores no se activa, por lo que Value2 en La GUI no está marcada como defectuosa
Valor2 se establece en 2 en la interfaz gráfica de usuario, ahora hemos llegado a un estado válido, pero sólo Valor2 se validó, por lo Valor1 todavía está marcada como defectuosa
¿Hay un patrón común de resolver ese problema? no queremos introducir una dependencia en la GUI entre las dos cajas de texto, porque esta lógica solo debería estar presente en la capa de lógica de negocios.
En lugar de implementar la validación por excepción también se podría implementar la interfaz IDataErrorInfo, pero todavía existe el problema, no hay manera de forzar a los valores en función de validar sus valores de nuevo, al menos ninguno que yo pueda ver :)
Cualquier ayuda se agradece
alegrías, manni
[limpieza, retira paso unecessary]
15.11.2010 - Parte 2
bien, gran repensado aquí, vamos con el nivel BusinessLogic. aquí está nuestra configuración planificada actual: (la imagen es un poco pequeña a escala aquí, por favor ábrala en una ventana separada para mostrarla en tamaño completo) todo está más o menos claro, excepto cómo notificar a todos los modelos de vista/clones modelo de los diferentes editores si se cambia el modelo de datos bajo la lógica comercial. Una forma de hacerlo es rastrear los modelos clonados en la lógica de negocios que los crea. Cuando se modifique el modelo de datos utilizando la lógica de negocios commit(), todos los demás clones de modelos registrados podrán ser notificados de los cambios y propagarlos aún más. alternativamente, la lógica comercial podría publicar un evento al que se suscriban todos los modelos de vista para que también puedan obtener los cambios. ¿Alguien podría darme una pista de qué es mejor?
Gracias de nuevo por la ayuda, lo siento Estoy tan mente bloqueada;)
¿Por qué los valores de las propiedades de configuración de VM en la capa empresarial? Esta parece ser la causa raíz de algunos de sus problemas. Todos (parece) tienen una interpretación ligeramente diferente de lo que significa MVVM, pero en mi humilde opinión el modelo es una combinación de un modelo de datos y controlador, por lo que contiene un superconjunto de los datos en la VM y coordina el acceso a servicios web/repositorios/etc. . Por lo tanto, su capa de negocios existente debe incorporarse en el modelo actual o posiblemente moverse después del modelo (es decir, del otro lado de un límite de WCF). – slugster
estamos pensando en colapsar el Modelo (que es nuestro modelo de datos) y BusinessLogic en una capa, que es esencialmente lo que quiere decir si lo entendiera correctamente. pero aun así creo que el vm no debe contener la validación. Pero aún así el problema del paso de cuerdas continúa. Al mover la lógica de negocios al otro lado de un límite wcf, ¿implicaría eso que todo el modelo es simplemente un titular de datos estúpido que puede editarse y enviarse como un todo a la lógica comercial y evaluarse allí? ¿tiene algún vínculo con respecto al uso de un límite wcf y la división? gracias por la ayuda – manni
Absolutamente haces la validación en la máquina virtual, pero es una validación simple, como * la contraseña es más larga que 6 caracteres * o * la dirección de correo electrónico es un formato válido *. Si desea mantener su lógica comercial desacoplada del modelo, considere utilizar un enfoque de n niveles para el repositorio de datos model-> business logic-> (es común que el BL y la capa de datos se incorporen en un servicio web, pero no tiene que ser así si solo está usando una base de datos local). Tener el BL en el modelo sigue siendo una mejor opción de lo que tienes actualmente. – slugster