Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Patrones MVC y Observer

Estas en el tema de Patrones MVC y Observer en el foro de Java en Foros del Web. Hola a todos. Me encuentro implantado el mvc en una aplicación y me surgen dudas dada mi poca experiencia en éste tipo de temas. Realizo ...
  #1 (permalink)  
Antiguo 09/12/2014, 05:54
 
Fecha de Ingreso: febrero-2014
Ubicación: España
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 1
Pregunta Patrones MVC y Observer

Hola a todos.
Me encuentro implantado el mvc en una aplicación y me surgen dudas dada mi poca experiencia en éste tipo de temas.

Realizo una aplicación de entrada de pedidos, con la siguiente estructura:
Vista: Pedidos.java
Controlador: ControladorPedidos.java, Principal.java
Modelo: ValidadorPedidos.java , DAOPedido.java

La pantalla principal, es solo el menú general del proyecto, en el que a parte de otras opciones, llamo al programa de pedidos.
En la pantalla de pedidos puedo seleccionar un número de pedido y cargarlo en una grid. La duda que tengo es saber cual es la mejor forma de hacerlo.

Opción 1: BotónCargar llama a un método de ControladorPedidos y éste a su vez llama a otro método de validación en ValidadorPedidos.java y si finalmente es correcto, se realiza la select sobre la bd en DAOPedido.java y ésta clase devuelve un vector de datos que va pasando en sentido inverso de DAOPedidos > ValidadorPedidos > ControladorPedidos > Pedidos y se cargen finalmente en pantalla.

Opción 2: Implantar patrón observer. La clase Pedidos sería la clase observadora y la clase ValidadorPedidos sería la Observable.

Otras opciones que no se me han ocurrido...

Saludos y muchas gracias.

Última edición por Azor; 09/12/2014 a las 06:09
  #2 (permalink)  
Antiguo 09/12/2014, 06:37
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Patrones MVC y Observer

Buenas,

El propio Swing ya proporciona y fomenta una arquitecura MVC por lo que tienes poco que hacer.

Pedidos.java seria la vista en la que declares los componentes y aniades los listener

ControladorPedidos.java sera una clase que implemente ActionListener y que procese los eventos recibidos desde la vista. Se podra apoyar en una clase de ayuda llamada ValidadorPedido.java (SI, es tarea del controlador validar los datos de entrada, no del modelo).

Para comunicar el controlador con el modelo deberias utilizar un bean Pedido.java que contenga todos los datos de un pedido con sus getter y setters correspondientes.
Este bean servira para transmitir la informacion entre el controlador y la base de datos.
En el modelo podras tener tu acceso a base de datos. En tu caso, has llamado a la clase DAOPedido del mismo modo que la podias haber llamado EspinetePedido, ya que el patron DAO no lo estas aplicando por ninguna parte (http://www.tutorialspoint.com/design...ct_pattern.htm).

La opcion 2 que comentas no tiene ningun sentido.
No te preocupes si quieres utilizar el patron Observer. En realidad lo estaras utilizando todo el tiempo, ya que el modelo de eventos/listeners de swing se basan precisamente en dicho patron.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 09/12/2014, 07:55
 
Fecha de Ingreso: febrero-2014
Ubicación: España
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Patrones MVC y Observer

Hola Profesor_Falken!

Muchas gracias por responder.

Cita:
Iniciado por Profesor_Falken;
ControladorPedidos.java sera una clase que implemente ActionListener y que procese los eventos recibidos desde la vista. Se podra apoyar en una clase de ayuda llamada ValidadorPedido.java (SI, es tarea del controlador validar los datos de entrada, no del modelo).
Entiendo que la clase ValidadorPedido deberia formar parte del concepto controlador y no modelo como dices.

Cita:
Iniciado por Profesor_Falken;
Para comunicar el controlador con el modelo deberias utilizar un bean Pedido.java que contenga todos los datos de un pedido con sus getter y setters correspondientes.
Este bean servira para transmitir la informacion entre el controlador y la base de datos.
En el modelo podras tener tu acceso a base de datos. En tu caso, has llamado a la clase DAOPedido del mismo modo que la podias haber llamado EspinetePedido, ya que el patron DAO no lo estas aplicando por ninguna parte
Aunque no lo comenté en mi primer mensaje para no hacer el post muy liado, si utilizo varios beans, uno de ellos es LineasPedido,java que replica todo los campos de la tabla lineas_pedidos, con sus sets y gets.
En la clase DAOPedidos, realizo todas operaciones sobre la bd (select, updates o deletes) y en el caso de haya que enviarse datos hacia la pantalla del usuario, utilizo una ArrayList del tipo LineasPedido que me devolvería la información que el usuario necesita. Tenia entendido (quizás erroneamente) que esta forma de tratar la información de la bd correspondía al patrón DAO. ¿Estoy equivocado?

Saludos y gracias por tu ayuda!

Última edición por Azor; 09/12/2014 a las 08:21
  #4 (permalink)  
Antiguo 09/12/2014, 08:26
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Patrones MVC y Observer

Buenas,

Correcto la mayoria de lo que comentas en ambos puntos. Vas bien encaminado, sigue asi.

Respecto a lo del DAO, el hecho de utilzar objetos para intercambiar la informacion se llama Data Transfer Object (DTO), y no DAO (Data Access Object).

El patron DAO es algo mas complicado a implementar, pero esta fuera del ambito de lo que es MVC, asi que no tienes porque incluirlo. Permite abstraer de la implementacion de la fuente de datos.
Si quieres intentarlo:
http://www.oracle.com/technetwork/ja...ct-138824.html

Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 09/12/2014 a las 08:31
  #5 (permalink)  
Antiguo 09/12/2014, 08:43
 
Fecha de Ingreso: febrero-2014
Ubicación: España
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Patrones MVC y Observer

Perdona mi ignorancia respecto a DAO y DTO y gracias por aclararme la duda.

En cuanto a la forma de devolver la información hacia la vista o usuario...
Cuando el usuario carga un pedido y lo puede llegar a modificar ¿cual sería el mejor "contenedor" para enviarle la información o lineas del pedido, mediante un ArrayList, un Vector, HasMap?

Disculpa por tanta pregunta.

Saludos.
  #6 (permalink)  
Antiguo 09/12/2014, 09:47
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Patrones MVC y Observer

Buenas,

Un ArrayList<Pedido> es correcto.

Vector es una clase muy antigua, que funciona como el arraylist pero esta sincronizada, por lo que es muchisimo mas lenta. Casi nadie la utiliza hoy en dia.
HashMap es una implementacion de mapa basada en funciones de dispersion y permite guardar informacion en formato clave/valor. Tiene un gran rendimiento en cuanto acceso (tiempo constante O(1)), pero tambien tiene sus limitaciones. Por ejemplo, no se puede ordenar.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 09/12/2014, 10:05
 
Fecha de Ingreso: febrero-2014
Ubicación: España
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: Patrones MVC y Observer

Pues muchas gracias por toda tu ayuda.

Saludos.

Etiquetas: mvc, patrones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:58.