2011-01-02 6 views
5

He visto muchos tutoriales y ejemplos usando patrones de diseño de IU de Model-View, y todos los implementan de manera bastante diferente, especialmente la parte del modelo. En algunos ejemplos, el modelo es datos (representación de objetos reales de algunos DB) en algunos es capa de acceso a datos (como patrón de repositorio) en algunos es capa de servicio ...
Si alguien le dice que está usando el patrón MV * en su aplicación, ¿qué ¿Te hablará sobre el diseño de la aplicación? Mantiene la representación en memoria de la base de datos en el gráfico de objetos y la usa como fuente de datos o alguna capa de acceso a datos para consultar la base de datos ...¿Qué es el modelo en los patrones de diseño de la interfaz de usuario como MVC, MVP, MVVM?

Lo que elegirá como modelo para la aplicación de cliente inteligente orientada a datos que contiene principalmente Tab Páginas con tablas?

Respuesta

7

La palabra modelo se utiliza en, al menos, dos sentidos. Existe su modelo de dominio. Aquí el sentido es cómo representas tus datos. Hay muchas formas de estructurar sus datos y también muchas formas de acceder a ellos. Cuando hablamos sobre el modelo en este sentido, no nos preocupa particularmente cómo está accediendo a las estructuras que lo componen, es decir, el acceso a los datos o la capa de persistencia, aunque también puede escuchar a la gente hablar del modelo de persistencia. Con esto, las personas quieren decir la filosofía particular que usa la implementación de persistencia, como ActiveRecord o Repository. También puede escuchar estos denominados patrones.

Finalmente, la palabra modelo tiene un significado muy específico en MVC, MVP y MVVM en el contexto de una vista. En ese contexto, significa ese objeto de datos particular asociado con una vista, el modelo de vista. Este podría ser uno de sus objetos de dominio, pero más típicamente es un objeto específico de vista que encapsula datos de uno o más objetos de dominio junto con datos auxiliares tales como datos de usuario que utiliza una vista particular.

Para su aplicación, elija el modelo de persistencia que mejor se adapte a su entorno de desarrollo y lenguaje - LINQ to SQL, LINQ to Entities, nHibernate, Castle ActiveRecord, etc. en el mundo MS Cree modelos específicos de vista (clases) para cada una de sus vistas que contienen los datos necesarios para esa vista. Use sus controladores para consultar su modelo de dominio para extraer la información que necesita la vista y asignarla al modelo de vista.

+0

@tvanfosson: ¿pero qué debería elegir consultar? DB directamente o gráfico de objetos en memoria? La mayoría de las veces, mi aplicación tendrá casi toda la BD cargada en el gráfico de objetos de memoria, y tiene sentido consultarla porque es más rápida, pero también tengo Vistas que contienen agregados complejos y pesados, y es más fácil y rápido consultar DB directamente para estos , es muy difícil mantener constantemente ese estado de vistas desde Object Graph, es más fácil actualizarlos a pedido desde db ... –

+0

@Broken Pipe: es posible que desee pensar en un repositorio personalizado (o caché) que mantenga su gráfico de objetos, pero refiere algunas consultas directamente al DB. Esto aislaría el resto de su aplicación al saber cómo se realizan las consultas. – tvanfosson

+0

@tvanfosson: si, eso es lo que estaba pensando, ¿crees que puedo usar el caché de segundo nivel de Nhibernate para esos fines, o debería implementar mi propio sistema personalizado? Si es así, ¿me será útil System.Runtime.Caching para estos? –

0

Si alguien dice que está usando el patrón MV *, significa que la aplicación se divide en varias partes, actuando sin una referencia directa a un tipo específico, no dice nada acerca de la implementación real. MVVM significa que tiene un modelo, un modelo de vista y una vista, eso es todo.

El modelo es su almacenamiento de datos. Esto no dice nada de la implementación de la misma, puede ser cualquier cosa, dependiendo de la tarea en cuestión. Sin embargo, se debe acceder utilizando interfaces, para que pueda intercambiar rápidamente la implementación. Ese es, en cierto sentido, el objetivo principal del patrón MVVM: desacoplamiento de los tres niveles mediante interfaces.

Su descripción se parece mucho a mi proyecto en este momento. Utilizo sqlite como almacenamiento de respaldo con Entity Framework como ORM. Sin embargo, también utilizo T4 para generar objetos Dto que luego se mapean a través de Automapper en ViewModel, ya que solo necesitan los datos, no la persistencia.

+0

Sí, casi lo mismo, pero utilizo Nhibernate como persistir, y DTO-Entity-EntityUI herencia en lugar de DTO-Entity con auto-mapper, ¿cuál es su modelo es objeto de memoria de memoria con EF respaldado como persist, o es EF guarida de acceso a datos? –

+0

Probablemente este último, solo obtengo los datos de la base de datos si es necesario, también utilizo la carga diferida por lo que cada acceso se difiere hasta que realmente se usa. – Femaref

0

El modelo generalmente se refiere a la capa de datos, pero como descubrí, en MVC esto puede ser un poco más inteligente cuando se implementa un enfoque ntier. La razón de esto es que el modelo no está contenido en su propio ensamblaje.

Aquí está algo de retroalimentación muy útil llegué a una pregunta similar Confussion over MVC and entity model

0

Un modelo se puede considerar como contenedor de datos que facilita la representación del componente de presentación y/o datos persistentes a/desde el origen de datos (es decir, base de datos, etc.).Además de los elementos del contenedor de datos, un modelo puede contener o no comportamiento, según el contexto de diseño de la arquitectura correspondiente.

Mientras que el término “modelo” con frecuencia se discute y se utiliza en el contexto patrón Modelo-Vista-Controlador, es uno de consideración más importante en el mundo actual de la arquitectura de software

Es posible que desee ver el siguiente article donde Se describen algunos patrones de diseño populares y nuevos que están relacionados con el componente de presentación y el modelo.

Cuestiones relacionadas