Quantcast
Channel: FiveTech Software tech support forums
Viewing all articles
Browse latest Browse all 26212

Ejemplo de MVC (Modelo-vista-controlador)

$
0
0
Manu, interesante ejemplo, sobre el cual me permito hacer alguna observación: Tu controlador tiene cosas como AllTrim( str( cantidad ) ) + " pesetas son: " + AllTrim( str( ::modelo:monedaAEuros( cantidad ) ) ) + " euros" , que es parte de la VISTA. Se demuestra si tratamos de traducir la app a otro idioma, tendríamos que cambiar el controlador, lo que se supone que si está bien no debería suceder. El patrón MVC define Modelo, Vista y Controlador, pero si queremos un framework completo, la arquitectura necesita de más aditamentos: un router que mueve los mensajes, una petición (o request) una respuesta ( o response), y más cacharros que 'aceitan' los engranajes. Es una forma no muy lineal que cuesta alinearla con el modelo mental que automaticamente usamos cundo programamos en Harbour clásico. Tu vista tiene un método GetCantidad, GetTipoConversion que estarían en la request. En realidad existirían 2 clases de request: la RequestEuroToPesetas y otra RequestPesetaAEuro, la vista genera los eventos de forma apropiada creando una u otra request. El controlador la recibe y en un case le pasará el mensaje apropiado al Modelo, que hará la conversión, creará una nueva response que se enviará a la vista correspondiente. Es característico que los controladores tiende a ser muy pequeños, de muy poquitas líneas, porque solo dirigen el tráfico, no alteran ni solicitud ni respuesta, solo invocan modelos y vistas. Lo gordo suele estar del lado del modelo, donde se encuentan frecuentemente, para cada objeto, una clase Repositorio y una clase Entidad. En la clase repositorio estarían los métodos que afectan al conjunto de entidades: por ejemplo en el repositorio FacturasRepo habría un método TodasDeCliente( cCodCliente ) que devolvería una colección de objetos EntidadFactura, aquellas que corresponden a un determinado cliente. En cambio la clase EntidadFactura tendría métodos tipo EstaVencida() ( boolean ) o TotalFactura() que afectan a un solo individuo o entidad. Retomando el concepto de 'router', 'request' y 'response', estas clases son particulares de el entorno de la aplicacion: no es lo mismo un ruter de una app de escritorio, de una app web (como Fiveweb o FWeb). Bueno, tengo que volver al curro, pero... pufff da para muchísimo. El Rafa subió en algun momento un ejemplo de una aplicacion web escrita en Harbour usando el http server de Harbour. Si adaptas tu código para que responda usando la estructura de esa aplicacion el panorama se aclara muchísimo. Un saludo

Viewing all articles
Browse latest Browse all 26212

Trending Articles