Pregunta

Lo siento si esto ya se ha preguntado, pero solo quiero asegurarme de que lo estoy haciendo bien.

Si tengo un objeto domian que tiene 10 propiedades en él. Tengo una cuadrícula en mi formulario principal que quiero mostrar casi todas las propiedades del modelo.

Creé un modelo de vista para envolver el objeto de dominio para mostrar en la vista de cuadrícula, pero luego tengo que exponer todas las propiedades nuevamente. Simplemente me siento unido directamente al modelo a través del modelo de vista, se siente sucio y daña un poco el propósito.

Entonces, por ejemplo, realmente no me gusta esto:

 {Binding DomainObject.Property}

donde DomainObject es propiedad en mi modelo de vista.

Entonces, mi pregunta principal es, ¿debería exponer todas las propiedades del modelo a través del modelo de vista solo para vincularlo a la cuadrícula?

EDITAR: solo para obtener información adicional, los objetos domian son objetos LINQ-To-SQL, por lo que no creo que implementen INotifyPropertyChanged, pero no estoy seguro.

¿Fue útil?

Solución

Algunas personas dirán que no importa, otras dicen que sí. Estoy en el último campamento, por estas razones:

  • Aumenta las dependencias de la vista, ya que ahora depende del modelo de datos, no solo del modelo de vista.
  • Usted requiere que los diseñadores necesiten conocer las propiedades y la estructura de su modelo de datos.
  • Crea más trabajo para la refactorización (casi inevitable) cuando decide que necesita una capa de indirección para formatear, validar o lo que sea.
  • Como señaló Thomas, los modelos de datos a menudo no implementan notificaciones de cambio

Sí, es un poco más de trabajo, pero creo que vale la pena reducir el desacoplamiento, los dolores de cabeza de mantenimiento, la colaboración con los diseñadores y la corrección.

PS. Si se encuentra mucho en esta situación, podría considerar una implementación de ICustomTypeDescriptor que envuelva cualquier objeto de datos y exponga sus propiedades con notificación de cambio. De esta forma, su máquina virtual puede extender este contenedor genérico hasta que decida que necesita extraer propiedades para fines tales como formateo y validación.

Otros consejos

Si necesita una notificación de cambio en las propiedades y el modelo no implementa INotifyPropertyChanged, debe crear nuevas propiedades en ViewModel. De lo contrario, probablemente no sea un gran problema vincularse directamente al modelo: el patrón MVVM es solo una guía, puede doblar un poco las reglas si es necesario ...

Creo que es una cuestión de preferencia personal. Creo que está perfectamente bien exponer el modelo en un solo objeto desde el modelo de vista. La recreación de todas las propiedades del Modelo en ViewModel solo da como resultado un montón de código adicional.

Sin embargo, esto solo funciona siempre que su Modelo implemente notificaciones de cambio para que funcione el enlace de datos.

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