Alternativas a la arquitectura de documentos y vistas
Normalmente, las aplicaciones MFC usan la arquitectura de documento/vista para administrar la información, los formatos de archivo y la representación visual de los datos a los usuarios. Para la mayoría de las aplicaciones de escritorio, la arquitectura de documentos y vistas es una arquitectura de aplicación adecuada y eficaz. Esta arquitectura separa los datos de la visualización y en la mayoría de los casos, simplifica la aplicación y reduce el código redundante.
Sin embargo, la arquitectura de documento o vista no es adecuada en algunas situaciones. Tenga en cuenta estos ejemplos:
Si se va a migrar una aplicación escrita en C para Windows, es posible que quiera completar el puerto antes de agregar la compatibilidad con documentos o vistas a la aplicación.
Si se está escribiendo una utilidad ligera, es posible que note que se puede hacer sin la arquitectura de documento o vista.
Si el código original ya combina la administración de datos con la visualización, no merece la pena mover el código al modelo de documento o vista, ya que se deben separar los dos. Es posible que prefiera dejar el código tal y como está.
Para crear una aplicación que no use la arquitectura de documento o vista, desactive la casilla Compatibilidad con la arquitectura de documento o vista en el paso 1 del Asistente para las aplicaciones MFC. Consulte el Asistente para las aplicaciones MFC para obtener más información.
Nota:
Las aplicaciones basadas en diálogo generadas por el Asistente para las aplicaciones MFC no usan la arquitectura de documento o vista, por lo que la casilla Compatibilidad con la arquitectura de documento o vista está deshabilitada si se selecciona el tipo de aplicación del cuadro de diálogo.
Los asistentes de Visual C++, así como los editores de código fuente y de diálogo, funcionan con la aplicación generada del mismo modo que lo harían con cualquier otra aplicación generada por el Asistente. La aplicación puede admitir barras de herramientas, barras de desplazamiento y una barra de estado, además tiene un cuadro Acerca. La aplicación no registrará ninguna plantilla de documento y no contendrá una clase de documento.
Tenga en cuenta que la aplicación generada tiene una clase de vista CChildView
, derivada de CWnd
. MFC crea y coloca una instancia de la clase de vista dentro de las ventanas de marco creadas por la aplicación. MFC todavía aplica el uso de una ventana de vista, ya que simplifica el posicionamiento y la administración del contenido de la aplicación. Puede agregar el código de pintura al miembro OnPaint
de esta clase. El código debe agregar barras de desplazamiento a la vista en lugar de al marco.
Dado que la arquitectura de documento/vista proporcionada por MFC es responsable de implementar muchas de las características básicas de una aplicación, su ausencia en el proyecto significa que usted es responsable de implementar muchas características importantes de la aplicación:
Según lo proporcionado por el Asistente para aplicaciones MFC, el menú de la aplicación contiene solo los comandos Nuevo y Salir en el menú Archivo. (El comando nuevo solo se admite para las aplicaciones MDI, no para las aplicaciones SDI sin compatibilidad con documentos o vistas). El recurso de menú generado no admitirá una lista de MRU (usada más recientemente).
Se deben agregar funciones e implementaciones del controlador para cualquier comando que admita la aplicación, incluidos Abrir y Guardar en el menú Archivo. MFC normalmente proporciona el código para admitir estas características, pero esa compatibilidad está estrechamente enlazada a la arquitectura del documento o vista.
La barra de herramientas de la aplicación, si se solicitó una, será mínima.
Es muy recomendable usar el Asistente para aplicaciones MFC para crear aplicaciones sin la arquitectura de documento o vista, ya que el asistente garantiza una arquitectura MFC correcta. Sin embargo, si se debe evitar el uso del asistente, estos son varios enfoques para omitir la arquitectura de documento o vista en el código:
Trate el documento como un anexo sin usar e implemente el código de administración de datos en la clase de vista, como se sugirió anteriormente. La sobrecarga del documento es relativamente baja. Un único objeto CDocument incurre en una pequeña cantidad de sobrecarga por sí misma, además de la pequeña sobrecarga de las clases base
CDocument
, CCmdTarget y CObject. Estas dos últimas clases son pequeñas.Declarado en
CDocument
:Dos objetos
CString
.Tres BOOL.
Un puntero
CDocTemplate
.Un objeto
CPtrList
, que contiene una lista de las vistas del documento.
Además, el documento requiere la cantidad de tiempo para crear el objeto del documento, sus objetos de vista, una ventana de marco y un objeto de plantilla del documento.
Trate tanto el documento como la vista como anexos sin usar. Coloque la administración de datos y el código de dibujo en la ventana de marco en lugar de en la vista. Este enfoque está más cerca del modelo de programación del lenguaje C.
Invalide las partes del marco de MFC que crean el documento y la vista para eliminar su creación. El proceso de creación de documentos comienza con una llamada a
CWinApp::AddDocTemplate
. Elimine esa llamada de la función miembro de la clase de aplicaciónInitInstance
y en su lugar cree una ventana de marcoInitInstance
por su cuenta. Ponga el código de administración de datos en la clase de ventana de marco. El proceso de creación de documentos o vistas se muestra en Creación de documentos o vistas. Esto es más trabajo y requiere una comprensión más profunda del marco, pero le libera por completo de la sobrecarga de documentos y vistas.
El artículo MFC: Usar las clases de base de datos sin documentos y vistas proporciona ejemplos más concretos de alternativas de documento/vista en el contexto de las aplicaciones de base de datos.