2011-10-21 10 views
5

He hecho esta pregunta a algunos colegas que creo que tienen un buen sentido del diseño. Curiosamente, he recibido respuestas variadas. Entonces, ¿qué opción crees que se ajusta mejor al patrón de MVVM y por qué?¿Cómo debo activar las alertas del ViewModel?

Supongamos que tengo un requisito para mostrar un icono de alerta cuando $ es superior a $ 10k.

  • Opción 1: VM tiene propiedad "Amount", disparador XAML y/o conjuntos de unión visibilidad elemento
  • Opción 2: VM tiene propiedad "showAlert", XAML une visibilidad usando un bool al convertidor de visibilidad
  • opción 3: VM ha propiedad "AlertVisibility", XAML se une directamente
  • opción 4: Otros (por favor explique)

Gracias por los comentarios!

+0

+1 para el n ° 2, pero con una etiqueta orientada más al negocio como 'AmountHasReachedThreshold' que alerta, que es más relacionada con la interfaz de usuario –

+0

Me gusta la opción 1 y la opción 2. Pero creo que la opción 3 reveló demasiada implementación – Melursus

+0

¿Ves lo que hice thar? – Will

Respuesta

4

En su caso tiene una regla de negocio definida Shown WHEN > 10k, debe estar encapsulada en ViewModel en lugar de View porque View tiene en cuenta el CÓMO se mostrarán los datos en lugar de WHEN y WHY.

así que yo sugeriría exponer ambas Amount y ShowAlert propiedades y evitar exponer AlertVisibility propiedad, ya que se dispersan por ejemplo WPF Ver cosas específicas como Visibility estados de enumeración (oculto, se derrumbó, ...)

Si prefiere exponer AlertVisibility podría enfrentar el siguiente problema en el futuro: imagine que las versiones más recientes de WPF se deshicieron de la enumeración molesta Visibility y en este caso debe modificar ViewModel para exponer la nueva infraestructura/propiedad de Visibilidad para que funcione correctamente, pero esto es no es correcto desde las perspectivas MVVM cuando un comportamiento de Vista encapsulado en ViewModel. Por lo tanto, Keep it Simple y exponer directamente la propiedad bool AlertVisible.

EDIT: En cuanto a la sugerencia de nombres en el comentario

totalmente de acuerdo! Sugiero cambiar el nombre AmountVisible al IsAmountSpecified o algo como esto.

+1

No llamaría a la propiedad ShowAlert, lo llamaría algo así como AmountOverThreshold. ShowAlert huele a Ver lógica. – cadrell0

+0

+1 por la buena respuesta, pero estoy de acuerdo con @ cadrell0. Llamarlo 'ShowAlert' suena demasiado como si estuvieras poniendo lógica de vista específica en tu ViewModel. Preferiría llamarlo 'IsValid' porque a ViewModel no le importa cómo ve el usuario un valor no válido, solo sabe que el valor no es válido. Depende de la Vista descubrir cómo mostrar los valores inválidos.(Si el valor puede ser no válido debido a otros motivos, como texto en un campo numérico, y esto es simplemente una regla comercial especial, entonces podría usar algo como 'IsThresholdExceeded', o algún otro nombre booleano que tenga sentido) – Rachel

+1

I Creo que depende si esta es una regla de negocios tal que la usarás en otro lado O si es la reacción de la vista a un valor. Si solo es una reacción, entonces haría lo siguiente. Pero si va a necesitarlo en otro lugar, entonces pertenece a la VM como lo sugiere SLL y se llama Cadrell0 – SQLMason

0

Me gustaría que el icono de alerta de mi vista vincule el valor de Cantidad a través de un convertidor que toma un parámetro de la cantidad de 10000. El convertidor volvería visible o colapsado.

También podría hacer que la VM envíe un mensaje cuando esté por encima del umbral y cualquier vista u otro modelo de vista que desee escucharlo puede reaccionar al mensaje.

+0

, tendrá lógica de visualización en su VM – SQLMason

Cuestiones relacionadas