Tengo un proyecto en el que ViewModels está anidado el uno dentro del otro de manera que esencialmente son una replicación de la jerarquía de dominio de tipo cadena. Por ejemplo, si nuestro dominio tiene las siguientes relaciones:ASP.NET MVC: ¿Nesting ViewModels entre sí, antipattern o no?
Organización tiene 1 a muchos entornos
Medio Ambiente tiene 1 a muchas máquinas
entonces habrá un OrganizationViewModel que tiene uno a muchos EnvironmentViewModels en el mismo, y EnvironmentViewModel tendrá de uno a muchos MachineViewModels. Este estilo de jerarquía se reutiliza en toda la aplicación, con uno de los cinco modelos de vista de este tipo. (por ejemplo, EnvironmentViewModel se usa para varias páginas, MachineViewModel también para muchas de ellas, dependiendo del nivel de la jerarquía que se esté visualizando ... Lo simplifiqué para fines de discusión, pero la jerarquía es un poco más grande que las 3 anteriores)
Ahora, por mucho que me gustaría bajar desde arriba y condenar esta práctica, no he podido encontrar mucha información sobre esto. ¿Alguien puede indicarme más detalles sobre la práctica establecida? Anécdotas para compartir?
(Mi propio error es que estos ViewModels no deben anidarse entre sí de esta manera, y los ViewModels en realidad deberían corresponder a las Vistas, no a los objetos de dominio. Me parece bastante complicado con algunos problemas de mantenimiento. 'gustaría saber lo que otros piensan o han experimentado.)
necesita más contexto. si está haciendo formularios sobre datos (aplicaciones CRUD simples), entonces lo que está describiendo probablemente sea suficiente. ¿Estás haciendo un proceso real en tu dominio, hasta el punto en que el modelo de dominio en realidad es diferente de las vistas? –
Hola Derick, algunas vistas de este proyecto son en gran parte representaciones de uno de los objetos de dominio con potencialmente una o dos propiedades de otro objeto de dominio utilizado para vincular a otra área (por ejemplo, hay una vista ManageEnvironment que tiene enlaces a ManageMachine y por eso use EnvironmentViewModel.MachineViewModel.ID para obtener esa ID con fines de vinculación). –