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

Como aplicar MVC correctamente

Estas en el tema de Como aplicar MVC correctamente en el foro de Java en Foros del Web. Hola comienzo a programar en java. me he leido algunos libros como el de la referencia de java-Herbert Schildt y el de Deitel, son muy ...
  #1 (permalink)  
Antiguo 14/01/2015, 19:08
 
Fecha de Ingreso: enero-2005
Mensajes: 95
Antigüedad: 19 años, 10 meses
Puntos: 0
Pregunta Como aplicar MVC correctamente

Hola comienzo a programar en java. me he leido algunos libros como el de la referencia de java-Herbert Schildt y el de Deitel, son muy buenos para comprender los conceptos de java, Sin embargo esos libros no explican sobre como usar los patrones como mvc en java.

Antes de mal acostumbrarme a escribir codigo espaguetti,prefiero comprender bien al menos como usar el patron mvc. Y es donde al buscar ejemplos me surgen las dudas, por ejemplo cuando se crea una interfaz grafica usando swing algunos declaran los componentes de la interfaz como públicos por ejemplo

Código:
public j2Button.j2Button cmdAcercade;
    public j2Button.j2Button cmdExit;
    public j2Button.j2Button cmdIdentificacion;
    public j2Button.j2Button cmdImprimir;
    public j2Button.j2Button cmdProgramar;
    public JCDesktopPane.JCDesktopPane jCDesktopPane1;
y en otro codigo que encontre los declaran como privados

Código:
	private Coordinador miCoordinador; //objeto miCoordinador que permite la relacion entre esta clase y la clase coordinador
	private JTextArea areaIntroduccion;
	private JLabel labelTitulo, labelSeleccion;
	private JButton botonRegistrar,botonBuscar;
De acuerdo a lo que he leido deberian ser privados y usar metodos publicos set y get para actualizar cada componente,es asi? y lo siguiente me tiene mas desconcertado ya que en el segundo trozo de codigo,donde declaran los componentes como privados, implementan el metodo actionPerformed de la interfazActionListener en la vista, segun he leido ese es el metodo que maneja el evento cuando hace click en los botones, Pero ese metodo deberia ser parte de la vista,el controlado o el modelo?

Código:
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==botonRegistrar) {
			miCoordinador.mostrarVentanaRegistro();			
		}
		if (e.getSource()==botonBuscar) {
			miCoordinador.mostrarVentanaConsulta();			
		}
	}
En el libro de deitel incluso usan una inner class y alli meten ese codigo,pero en todo caso no estan usando ningun patron de diseño,y en primer trozo de codigo,donde estan los atributos como publicos, implementan el actionPerformed en el controlador . Hay algo como una especie de guia MVC para java o es flexible a que cada quien los implemente a su criterio, al final lo que si tienen en comuna mbos codigos es que al instanciar la clase controlador le envian como argumentos la vista y el modelo new Controlador(Vista vista,Modelo modelo)
__________________
customsmf
Seo,tutoriales,decargas
  #2 (permalink)  
Antiguo 15/01/2015, 02:54
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Como aplicar MVC correctamente

Cita:
De acuerdo a lo que he leido deberian ser privados y usar metodos publicos set y get para actualizar cada componente,es asi?
Eso no es MVC, es encapsulamiento. El encapsulamiento es bueno siempre.

Cita:
implementan el metodo actionPerformed de la interfazActionListener en la vista, segun he leido ese es el metodo que maneja el evento cuando hace click en los botones, Pero ese metodo deberia ser parte de la vista,el controlado o el modelo?
El MVC no perfecto, habrá ocasiones donde una misma clase tendrá que hacer funciones de dos capas o gente que cree que un elemento pertenece a una capa y otros a otra.

En el caso de Swing, vista y controlador están muy unidos (que me corrijan si no es cierto), pero eso no impide que intentes separar por tu cuenta lo máximo posible.

¿Cómo?

Supón que tienes un textbox y recoges el evento cuando alguien escribe algo y ese dato quieres guardarlo en un archivo. Si haces el proceso dentro del listener, estás uniendo las dos capas, si creas una clase aparte que escriba a fichero ese texto que le pases como parámetro desde el listener, estás separando más las capas.

Cita:
Hay algo como una especie de guia MVC para java o es flexible a que cada quien los implemente a su criterio,
Como ya he dicho, es flexible, desconozco si hay un tutorial más o menos completo que te pueda guiar. Creo que la duda está sobre todo entre vista y controlador, los modelos son más evidentes.

Hay un libro sobre patrones de diseño bastante ameno, pero no te va a dar profundidad sobre el tema.

http://www.amazon.com/Head-First-Des.../dp/0596007124

Como truco te diría que siempre pienses, si convierto mi aplicación de escritorio en una web, ¿qué clases tendría que cambiar? Cuantas menos sean, más cerca estarás del patrón MVC.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 17/01/2015, 17:44
 
Fecha de Ingreso: enero-2005
Mensajes: 95
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Como aplicar MVC correctamente

Gracias por tu respuesta, muy detallada, con lo de los atributos publicos o privados,me falto dar mas informacion. el codigo completo de esa clase era este
Código:
package vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

import controlador.Coordinador;

public class VentanaPrincipal extends JFrame implements ActionListener{
	
	private Coordinador miCoordinador; //objeto miCoordinador que permite la relacion entre esta clase y la clase coordinador
	private JTextArea areaIntroduccion;
	private JLabel labelTitulo, labelSeleccion;
	private JButton botonRegistrar,botonBuscar;
	

	/**
	 * Establece la informacion que se presentara como introduccion del sistema
	 */
	public String textoIntroduccion = "";

	/**
	 * constructor de la clase donde se inicializan todos los componentes
	 * de la ventana principal
	 */
	public VentanaPrincipal() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		botonRegistrar = new JButton();
		botonRegistrar.setBounds(100, 280, 120, 25);
		botonRegistrar.setText("Registrar");
		
		botonBuscar = new JButton();
		botonBuscar.setBounds(240, 280, 120, 25);
		botonBuscar.setText("Buscar");

		labelTitulo = new JLabel();
		labelTitulo.setText("PATRON MODELO VISTA CONTROLADOR");
		labelTitulo.setBounds(60, 40, 380, 30);
		labelTitulo.setFont(new java.awt.Font("Verdana", 1, 15));

		labelSeleccion = new JLabel();
		labelSeleccion.setText("Escoja que operacion desea realizar");
		labelSeleccion.setBounds(75, 240, 250, 25);

		textoIntroduccion = "Esta aplicación presenta un ejemplo práctico del patron "
				+ "de diseño MVC.\n\n"
				+ "La aplicación permite registrar, actualizar, buscar y eliminar registros de una tabla Persona." +
				"tambien son vinculados algunos conceptos de los Patrones Value Object y Data Access Objetc\n";

		areaIntroduccion = new JTextArea();
		areaIntroduccion.setBounds(50, 90, 380, 140);
		areaIntroduccion.setEditable(false);
		areaIntroduccion.setFont(new java.awt.Font("Verdana", 0, 14));
		areaIntroduccion.setLineWrap(true);
		areaIntroduccion.setText(textoIntroduccion);
		areaIntroduccion.setWrapStyleWord(true);
		areaIntroduccion.setBorder(javax.swing.BorderFactory.createBevelBorder(
				javax.swing.border.BevelBorder.LOWERED, null, null, null,
				new java.awt.Color(0, 0, 0)));

		botonRegistrar.addActionListener(this);
		botonBuscar.addActionListener(this);
		add(botonBuscar);
		add(botonRegistrar);
		add(labelSeleccion);
		add(labelTitulo);
		add(areaIntroduccion);
	
		setSize(480, 350);
		setTitle("CoDejaVu : Patrones de Diseño/MVC");
		setLocationRelativeTo(null);
		setResizable(false);
		setLayout(null);

	}


	public void setCoordinador(Coordinador miCoordinador) {
		this.miCoordinador=miCoordinador;
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==botonRegistrar) {
			miCoordinador.mostrarVentanaRegistro();			
		}
		if (e.getSource()==botonBuscar) {
			miCoordinador.mostrarVentanaConsulta();			
		}
	}
}
y alli es donde ponian el atributo de los botones como privados pero definían alli el actionPerformed,pero ya explicabas que eso era posible.

me leere el libro que recomiendas,creo que lo tengo por alli, es bastante recomendado
__________________
customsmf
Seo,tutoriales,decargas

Etiquetas: clase, correctamente, mvc, programa
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 17:54.