Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.Introducción
El patrón MVC (Trygve M. H. Reenskaug, http://heim.ifi.uio.no/~trygver/) es un concepto
antiguo de la programación, existente desde los años 70. La máxima que persigue es tener
una buena separación de conceptos, dejando por un lado la lógica de la aplicación (modelo
de datos) y por otro lado la vista (interfaz gráfica). El controlador es el aparato software
encargado de conectar ambos.
Pensemos por ejemplo en una aplicación para generar una Factura. Para ello deberíamos
tener un formulario o ventana, con los campos correspondientes a la factura. En la misma
clase que representa a nuestra ventana almacenaríamos los campos correspondientes a la
factura.
class Ventana {
String concepto;
BigDecimal precio;
int cantidad;
2.El patrón
El patrón MVC propone una separación de conceptos, dejando por un lado el modelo de
datos, que es el que contiene la lógica de la aplicación y, por otro lado la vista, que es
la encargada de representar gráficamente los datos del modelo. De esta manera
independizamos la lógica de negocio (es decir el modelo) de la interfaz gráfica.
class Factura {
private List<LineaFactura> lineas;
...
public BigDecimal getTotal() {
BigDecimal total = new BigDecimal(0);
lineas.forEach(linea -> total = total.add(linea.getSubtotal()));
return total;
}
...
}
class LineaFactura{
String concepto;
BigDecimal precio;
int cantidad;
}
class VentanaLinea {
LineaFactura linea;
void show() {...}
}
La tercera clase (o clases) que forma parte del patrón es el controlador, que se encarga de
actualizar el modelo en base a los cambios que realiza el usuario en la vista. El controlador
también se encarga de acciones que no pertenecen a la vista ni al modelo, como la
validación de datos. También es el encargado de seleccionar la mejor vista para mostrar el
modelo en cada momento.
Toda la operativa entre las diversas clases que conforman el patrón se realiza a través de
métodos y eventos. Los eventos se utilizan para que sea el propio modelo el que notifique a
la vista cuando se produce un cambio, para que ésta pueda actualizarse, evitando así una
espera activa. De igual manera, la vista notifica al controlador las acciones del usuario
(pulsar un botón, introducir texto, etc.)
Con este patrón conseguimos una buena separación de conceptos, así como una alta
cohesión de clases. Desde su aparición han surgido numerosas variaciones del mismo, con
el fin de adaptarlo a las características de la tecnología usada (web, escritorio, móvil, etc.).
Algunas de ellas son MVP (Model
En este caso, el diseño que realizamos consiste en separar la vista del modelo, haciendo
que la comunicación entre ambos siempre se realice a través del controlador. El modelo no
define siquiera observers, por lo que la separación de la lógica
de negocio del resto de la aplicación es mayor, pues
eliminamos de las clases de negocio (modelo) el código
correspondiente a los eventos. El controlador actúa como
supervisor del modelo y avisa a la vista de los cambios.
La ventana será la encargada de mostrar la línea y dará opción a modificarla. En este
ejemplo nos podemos encontrar dos flujos de trabajo:
● Las clases de vista y controlador (JTable) que definen cómo se ve la tabla y cómo
reacciona ante la interacción con el usuario.
● La clase modelo son dos: TableModel, que contiene los datos, y TableColumnModel,
que define las columnas que se muestran, columnas que pueden ser seleccionadas,
orden de las mismas, etc.
6.Referencias
● Model-View-Controller. http://c2.com/cgi/wiki?ModelViewController
● The MVC pattern implemented with java swing
https://www.link-intersystems.com/blog/2013/07/20/the-mvc-pattern-implemented-wit
h-java-swing/
● A Swing Architecture Overview. The Inside Story on JFC Component Design. By
Amy Fowler. http://www.oracle.com/technetwork/java/architecture-142923.html
● GUI Architectures. Martin Fowler http://martinfowler.com/eaaDev/uiArchs.html
● MVC or MVP Pattern – Whats the difference?
http://www.infragistics.com/community/blogs/todd_snyder/archive/2007/10/17/mvc-or
-mvp-pattern-whats-the-difference.aspx
● Presentation Model. Martin Fowler.
http://martinfowler.com/eaaDev/PresentationModel.html
● MVW https://plus.google.com/+AngularJS/posts/aZNVhj355G2