Programacion orientada a objeto avanzada con xHarbour (VIII)

Siguiendo con la programación por capas MVC y después de ver como se hace la capa de peristencia y como se conecta el modelo de datos a ella, pasamos a estudiar la estructura de la programación usando MVC. Para ello he construido un ejemplo en Xailer (ejemplo_1) que se puede descargar desde el enlace siguiente:

Descargar proyecto del ejemplo 1 hecho en Xailer.

7.- Estructura típica del MVC

Antes de desacargar el código fuente del ejemplo y poneros a leerlo, cayendo en la locura de no entender nada y pensar que todo es un tremendo enredo que va y viene mil veces al mismo sitio, estudiemos este diagrama de como funciona una aplicación típica MVC:

Esquema de un MVC típico.

Esquema de un MVC típico.

Al Inicio del Programa se carga el Controlador Principal que es el encargado de mostrar el Formulario Principal de la aplicación (en este caso menú). Cada vez que pulsemos una opción del menú se ejecutará una acción que llamará al método correspondiente del Controlador Principal; desde donde cargaremos el Controlador Específico de la opción seleccionada. En mi caso siempre muestro un browse (unas veces contendrá toda las filas de la tabla, otras sólo las que me interese), así que al mismo tiempo que cargo el Controlador Específico, muestro el formulario que contiene el browse y los botones para realizar el ABM. Cada opción que pulsemos ejecutará el método correspondiente de su controlador, ejecutando, en su caso, el formulario de edición, el formulario de parámetros para un informe, la llamada a otro controlador ( controlador de un informe, controlador de una pantalla de búsquedas de datos de otro objeto, etc.). Dentro del controlador tendremos los métodos de comporbación de errores del formulario de edición.

Ni que decir tiene que el esquema es general, cada Controlador Específico tendrá los procesos que requiera, no siendo obligatorio que todos tengan la mismas funcionalidades.

Como podemos observar en el esquema, el control del programa siempre está dentro de un controlador, los formularios son “ventanas tontas” que sólo muestran cosas sin participar en la toma real de decisiones del programa. Es importante tener en cuenta también que el modelo de datos tampoco contiene la lógica del control de la aplicación: estará todo en los conroladores.

Estoy seguro (a mi me paso cuando comencé con este sistema de programación) que pensaréis que es una gran pérdida de tiempo y de recursos el crear tantas capas y tan “independientes” una de la otra y que el mantenimiento de los programas se va a convertir en un galimatías para poder seguir el flujo de ejecución; pero no es así, en cuanto nos acostumbremos a pensar en capas, a tener claro que cada una funciona independiente de la otra, veremos que el mantenimiento se hace muy cómodo. Si sabemos que la parte del modelo funciona correctamente y que el formulario no tiene más logica que dibujarse, sólo nos queda preocuparnos de que la lógica de nuestro controlador esté bien.

Otra de las excusas habituales (que yo también he usado cuando empecé con esto) es la de la cantidad de código que tenemos que escribir . . . . bueno . . .  ¿somos programadores o usuarios de IDE? Que sí, que buscamos entornos productivos que nos permitan hacer aplicaciones como churros, pero . . . ¿de cuantas de esas aplicaciones puedes reutilizar su código? ¿Que pasa si un día queremos cambiar el aspecto de nuestros formularios? ¿Y si queremos cambiar de DBF a SQLite o a SQL cliente/servidor? ¡¡¡¡AAAAHHHH!!! Es que eso requiere rehacer toda nuestra aplicación y eso, eso …. nos obliga a ser poco producivos y versátiles.

En el próximo artículo estudiaremos poco a poco el código fuente que he dejado aquí, está hecho para Xailer, pero sólo tendremos que cambiar los formularios y el #include para poder usar practicamente todo con otros entornos xBase; no olvidar que habrá que retocar PersistenciaConexión para adaptarlos a los datasources y dataset de otro entorno). De momento dejo que lo miréis. (Para compilar necesitaréis la librería complements.lib e indicar en las propiedades de proyecto Xailer que quereis usar SQLite).

Anuncios

5 comentarios

  1. Hola,

    Gracias por abrirnos el panorama a los que no somos entendido en la POO.

    Con tu comentario:
    “…..pero sólo tendremos que cambiar los formularios y el #include para poder usar practicamente todo con otros entornos xBase; no olvidar que habrá que retocar PersistenciaConexión para adaptarlos a los datasources y dataset de otro entorno…”

    Entonces como echo andar todo esto si estoy en modo consola, o si la GUI que elijo para seguir estos ejemplos no tiene datasource, ni dataset, ni nada de nada…?.

    Alguna ayuda que me puedas brindar por favor.

    Gracias

    Saludos,
    Javier

    • Hola Javier,

      Puedes hacerl andar la libreria complements.lib en modo consola tanto con Harbour, xHarbour y cualquier GUI que se soporte en ellos.

      En el caso de que no tengas datasources y datasets, tendrás que programar la capa de persistencia de acuerdo con la forma de acceso a datos que uses.
      La capa de persistencia es la encargada de leer, añadir, actualizar y borrar registros del motor de datos que uses.

      Gracias por el comentario.

      Saludos cordiales.

      • Hola José Alfonso,

        Gracias por tu respuesta, y habrá muchoooo que estudiar.

        Saludos,
        Javier

  2. Boa Noite

    Antes de tudo quero lhe parabenizar pelos artigo, estão me esclarecendo muitas coisas que ainda não havia entendido na prática de como utilizar.

    Gostaria de saber se teria como disponibiliar esse artigos em um único arquivo tipo PDF, para que não tenha que ficar salvado arqigo por artigo, Gostaria também de solicitar o código fonte dos exemplos. haja vista que isso já foi escrito a algum tempo e os links para downloads não estão mais ativos.

    Saudações.

    Marcelo Antônio Pacíficio Cavalcanti

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: