Translate

lunes, 25 de junio de 2012

Es Delphi MVC ? ... Parte III

De como Delphi naturalmente permite implementar MVC .. en buena medida ..


Ya vimos que la pregunta  correcta no es si Delphi es o no MVC .. sino si Delphi permite implementar el principio MVC (para algunos quizás solamente 'patrón') 


Implementaciones de MVC, hay muchísimas .. pero todas usan el patrón de diseño llamado  'El Observador' .. 


Este es un patrón muy conocido y usado. Básicamente consiste en que 'algo' al cambiar, le comunica que cambió a un conjunto de 'observadores' que actuarán en consecuencia, haciendo 'algo', eventualmente nada.


Ya lo dice Wikipedia: 


Es un patrón de diseño que define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, notifica este cambio a todos los dependientes.


Y cual sería la 'cosa' que cambia y cuyos cambios deben ser 'observados' ? .. la respuesta es obvia: El Modelo.


Ahora llegamos a un punto crucial .. como permite representar Delphi a un 'Modelo' ?? .. La respuesta es:
  • Delphi permite representar un Modelo como mejor a uno la parezca, porque es un compilador potentisimo y muy sofisticado
  • La manera obvia de representar un Modelo es con Clases y propiedades .. esto es bastante claro. Acá habrá que resolver la 'persistencia' del Modelo.
  • Delphi, sin embargo estar orientado naturalmente a un Modelo 'relacional' .. o sea basado en Tablas y columnas.
Es tan fuerte la implementacion del 'modelo relacional' en Delphi .. tan madura, sofisticada y versátil .. que justamente da lugar a la experiencia RAD que en mi opinión es algo único, distintivo de Delphi.

O sea la posiblidad de diseñar un modelo de tipo relacional y .. precisamente conectarlo a las Vistas de manera inmediata.

A esta altura ya todos sabemos de que estoy hablando .. el patrón del 'Observador' esta naturalmente implementado en Delphi a traves de la conexion entre descendientes del componente TDataSet y el componente TDataSource .. el que a su vez conecta naturalmente con las Vistas .. las que responden automáticamente a cualquier cambio que se produce en el Modelo (relacional)


Que es lo que ocurre cuando un programador que no sabe de MVC, empieza a escribir código en Delphi  ??


Pues que 'mezcla' .. todo en una sola unidad descendiente de  TForm .. usualmente. Entonces el Modelo la Vista y los Controladores .. colusionan en un mismo espacio entremezclados y vuelven dificil el mantenimiento y la extensión.


Es esto culpa de Delphi ?? .. pues si y no. 
  • Si .. porque Delphi permite escribir tan pero tan facil todo junto que pocos se toman el trabajo de separar el código del Modelo del código de las Vistas .. 
  • No .. porque, Delphi propone desde hace mucho tiempo escribir el código de 'datos' (el Modelo relacional) en la clase TDataModule, diseñada específicamente para colocar el código relacional (Componentes, Métodos, Interfases .. etc)
Y los controladores ? .. los controladores, es la parte donde Delphi realmente no propone en forma nativa una implementación formal ... o sea una clase 'TController' .. o algo por el estilo.


Y entonces como se controla una aplicacion ? .. Esto la sabe cualquier programador de Delphi !!! .. escribiendo código en los Eventos de los 'Controles' que están sobre las Vistas ..


De hecho, ese código de control de la aplicacion hace las dos cosas esperadas de un controlador:
  • Ejecuta métodos del Modelo (Ejemplo: El Operador presiona un botón de 'Grabar' y el controlador ejecuta el método .. Modelo.GrabarDatos())
  • Y eventualmente acciona sobre la Vista misma (Ejemplo: El Operador presiona un ToolButton y deshabilita otros o cambia en algo la apariencia de la Vista, ocultando o mostrando controles)
Finalmente no deja de ser importante notar que los controles del tipo 'Data aware' .. o sea conectados a una Fuente (a través en realidad del objeto interno TDataSetLink) ... tienen su propio Controlador interno.

No hay comentarios:

Publicar un comentario