¿Cómo se mantiene la lógica de vista del modelo y la lógica de negocio fuera de la vista-modelo en el MVVM?

StackOverflow https://stackoverflow.com/questions/900991

Pregunta

Yo no puedo encontrar la manera de obtener el modelo de objeto de ser notificado de los cambios en el modelo sin la adición de un montón de cosas específicas como la interfaz de usuario y INotifyProperyChanged INotifyCollectionChanged en mi modelo o crear toneladas de diferentes eventos y hacer un montón de cosas que se sienten como si estuvieran interfaz de usuario específico y deben permanecer fuera del modelo.

De lo contrario yo acababa de tener que duplicar toda la lógica de negocio en la vista-modelo para asegurarse de que todo está al día, y entonces ¿cuál es el punto de tener el modelo entonces?

Uno de los más difíciles que tengo en mi modelo es una propiedad de una clase "Categoría". Se puede pensar en ello como una estructura de árbol y la propiedad es todos los descendientes de nodo hoja. Bien en el modelo que la propiedad se genera sobre la marcha de forma recursiva a través de todos los niños es, que es todo bien y bueno. La vista-modelo sin embargo necesita unirse a esa propiedad y necesita saber cuando cambia. ¿Debo cambiar el modelo para dar cabida a la vista-modelo? Si yo entonces la vista-modelo en realidad no hago nada en este momento, el modelo plantea todas las notificaciones necesarias de cambios y la vista apenas se puede unir directamente al modelo. Además, si el modelo era algo que no tenía la fuente a, ¿cómo podría evitar esto?

¿Fue útil?

Solución

No estoy de acuerdo que INotifyPropertyChanged y INotifyCollectionChanged son IU-específica. Se encuentran en espacios de nombres y conjuntos que no están vinculados a ninguna pila de interfaz de usuario en particular. Por esa razón, suelen poner ese tipo de comportamiento tan bajo en el sistema como pueda (por lo general la capa de datos).

Si hay alguna razón no desea poner en ese nivel, eso está bien. Usted puede ponerlo en un nivel superior, tales como la capa de servicio o de la interfaz de usuario. Sin embargo, es necesario asegurarse de que todos los cambios en las estructuras de datos se producen a través de esa capa también.

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