2009-07-30 15 views
5

Estoy un poco confundido sobre cómo debería funcionar el modelo en mi implementación básica de C++, o más bien cómo deberían encapsularse/procesarse los datos de, por ejemplo, el backend de la base de datos.C++ MVC Model - ¿Cómo debería implementarse?

Mis pensamientos en este momento son para un modelo con un método findById() estático, que devolvería una instancia de ese mismo modelo, que luego representaría una sola 'fila' de datos (lo que permite la manipulación, etc.) podría ser un enfoque adecuado.

En términos de crear una nueva fila en la base de datos, supongo que se creará una nueva instancia del modelo, se rellenará con datos y se llamará efectivamente a un método save()?

Espero que esté en la línea correcta, pero estoy un poco confundido sobre la implementación/diseño aquí.

Cualquier consejo sería muy apreciado.

Gracias de antemano, James

+1

¿De qué estás hablando? – User

+0

Me temo que por ahora no es comprensible cuál es su problema. Supongo que estás diseñando algún tipo de framework MVC para usar con C++. Pero no está muy claro, qué está haciendo, con qué fines, en qué etapa se encuentra y cuál es exactamente su problema actual. ¿Puedes por favor dar más detalles sobre eso? – User

+0

Hmm. Entiendo el principio de MVC, y lo que se supone que debe lograr el modelo, es más una cuestión de qué tipo de interfaz debe tener el modelo. ¿Debería consultar los datos a través de métodos estáticos, y luego las instancias del modelo representan solo 'filas' de datos? Esperemos que esto proporcione alguna aclaración ^^; ... –

Respuesta

4

Creo que se pregunta qué tipo de interfaz sería apropiada para "traducir" entre una base de datos relacional y una aplicación orientada a objetos, particularmente en el contexto de una aplicación MVC escrita en C++.

Un enfoque común se llama mapeo relacional de objetos o ORM. Sólo estoy familiarizado con la forma de Ruby on Rails implementa ORM, pero si lo llevas a C++ que tiene este aspecto:

  • una base de datos de mapas de mesa a una clase
  • Operaciones sobre una mesa (como las consultas) asignar a funciones miembro estático de la clase correspondiente
  • filas de una tabla corresponden a instancias de la clase correspondiente
  • campos de una tabla corresponden a las variables miembro de la clase correspondiente

Ther Probablemente sean bibliotecas C++ para hacer el mapeo ORM por usted. No estoy familiarizado con ninguno, ya que nunca tuve que hacer esto en C++.

Editar: This Pregunta pregunta acerca de las bibliotecas ORM para C++.

1

primer consejo: la "banda de los cuatro" libro - Patrones de Diseño por Gamma et al. Explica MVC y el otro patrón necesario: observador.

Wikipedia también podría ser útil.

Básicamente: el modelo representa los datos y sus posibilidades de manipularlos. Es una clase. El modelo no debe conocer la vista o el controlador. Debe tener la posibilidad de notificar a los demás los cambios sin conocerlos (patrón observador, señales en qt por ejemplo). La Vista muestra los datos y reacciona a los cambios. Se registra como observador del modelo y conoce el modelo en la mayoría de los casos (no es necesario desacoplarlo). Varias vistas pueden usar el mismo modelo. Lo mismo para el controlador. En la mayoría de las IU modernas, la vista y el controlador están estrechamente acoplados, a veces incluso el mismo objeto (por ejemplo, un control deslizante que muestra un valor y al mismo tiempo lo cambia moviéndolo).

Por razones históricas: lern Smalltalk (por ejemplo, Cincom Smalltalk).

Cuestiones relacionadas