Java - Correcta implementacion MVC, DAO

   
Vista:
Imágen de perfil de Julian

Correcta implementacion MVC, DAO

Publicado por Julian (2 intervenciones) el 27/01/2018 17:30:57
Hola, buen dia. Soy nuevo en el Foro.

En pro de aplicar de forma correcta los conceptos de MVC, DAO me gustaría saber si el siguiente fragmento de un proyecto que hice esta bien implementado siguiendo los estándares de los patrones antes mencionados:

Modelo EmpleadoVO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package Modelo;
/**
 *
 * @author Julian Lopez
 */
public class Empleado {
 
    private int empleadoId;
    private String empleadoNombre;
    private String empleadoApellido;
    private String empleadoContacto;
 
 
    public Empleado(int empleadoId, String empleadoNombre, String empleadoApellido, String empleadoContacto) {
        this.empleadoId = empleadoId;
        this.empleadoNombre = empleadoNombre;
        this.empleadoApellido = empleadoApellido;
        this.empleadoContacto = empleadoContacto;
 
    }
 
    public Empleado() {
        this.empleadoId = 0;
        this.empleadoNombre = "";
        this.empleadoApellido = "";
        this.empleadoContacto = "";
    }
 
    public int getEmpleadoId() {
        return empleadoId;
    }
 
    public void setEmpleadoId(int empleadoId) {
        this.empleadoId = empleadoId;
    }
 
    public String getEmpleadoNombre() {
        return empleadoNombre;
    }
 
    public void setEmpleadoNombre(String empleadoNombre) {
        this.empleadoNombre = empleadoNombre;
    }
 
    public String getEmpleadoApellido() {
        return empleadoApellido;
    }
 
    public void setEmpleadoApellido(String empleadoApellido) {
        this.empleadoApellido = empleadoApellido;
    }
 
    public String getEmpleadoContacto() {
        return empleadoContacto;
    }
 
    public void setEmpleadoContacto(String empleadoContacto) {
        this.empleadoContacto = empleadoContacto;
    }
 
}

EmpleadoDAO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class EmpleadoDAO {
    public ArrayList<Empleado> listarEmpleado(int empleadoId) {
        Connection con = null;
        PreparedStatement prepared = null;
        ResultSet result = null;
        ArrayList<Empleado> listado = new ArrayList<>();
        try {
            con = Conexion.getConection();
            String selectSQL = "";
 
            if (empleadoId == 0) {
                selectSQL = "SELECT * FROM tb_empleado";
            } else {
                selectSQL = "SELECT * FROM tb_empleado WHERE Empleado_ID = ?";
            }
            prepared = con.prepareStatement(selectSQL);
 
            if (empleadoId != 0) {
                prepared.setInt(1, empleadoId);
            }
 
            result = prepared.executeQuery();
            Empleado empleado = null;
 
            while (result.next()) {
                empleado = new Empleado();
                empleado.setEmpleadoId(result.getInt("Empleado_ID"));
                empleado.setEmpleadoNombre(result.getString("Empleado_Nombre"));
                empleado.setEmpleadoApellido(result.getString("Empleado_Apellido"));
                empleado.setEmpleadoContacto(result.getString("Empleado_Contacto"));
                listado.add(empleado);
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Código : "
                    + ex.getErrorCode() + "\nError :" + ex.getMessage());
        }
        return listado;
    }
 
    public int grabarEmpleado(Empleado empleado) {
        Connection con = null;
        PreparedStatement prepared = null;
        int resultado = 0;
 
        try {
            con = Conexion.getConection();
            String insertSQL = "INSERT INTO tb_empleado VALUES ( ?, ?, ?, ?)";
            prepared = con.prepareStatement(insertSQL);
            prepared.setInt(1, empleado.getEmpleadoId());
            prepared.setString(2, empleado.getEmpleadoNombre());
            prepared.setString(3, empleado.getEmpleadoApellido());
            prepared.setString(4, empleado.getEmpleadoContacto());
            resultado = prepared.executeUpdate();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Código : "
                    + ex.getErrorCode() + "\nError :" + ex.getMessage());
        }
        return resultado;
    }

Controlador:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ControladorEmpleado {
    public static ArrayList<Empleado> listarEmpleado(int empleadoId) {
        ArrayList<Empleado> listaEmpleado; //= new ArrayList<>();
        EmpleadoDAO empleadoDAO = new EmpleadoDAO();
        listaEmpleado = empleadoDAO.listarEmpleado(empleadoId);
        return listaEmpleado;
 
    }
 
    public static int grabarEmpleado(Empleado empleado) {
        EmpleadoDAO empleadoDAO = new EmpleadoDAO();
        int resultado = empleadoDAO.grabarEmpleado(empleado);
        return resultado;
    }

Vista:
En cuanto a la vista, no pondré el código completo ya que uso el Gui Builder de Netbeans para realizar todo lo relacionado con la Interfaz Gráfica, sin embargo pondré el código que pongo en uno de los botones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        if (txtEmpleadoID.getText().equals("") || txtEmpleadoNombre.getText().equals("")
                || txtEmpleadoApellido.getText().equals("") || txtEmpleadoContacto.getText().equals("")
                || txtEmpleadoDireccion.getText().equals("") || txtEmpleadoSalario.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "Por favor diligencie todos los datos", "Falta Informacion", JOptionPane.INFORMATION_MESSAGE);
        } else {
 
            Empleado miEmpleado = new Empleado();
            CargoEmpleado cargosEmpleado = new CargoEmpleado();
 
            cargosEmpleado = (CargoEmpleado) cboCargo.getSelectedItem();
 
            int empleadoId = Integer.parseInt(txtEmpleadoID.getText());
            String empleadoNombre = txtEmpleadoNombre.getText();
            String empleadoApellido = txtEmpleadoApellido.getText();
            String empleadoContacto = txtEmpleadoContacto.getText();
            String empleadoDireccion = txtEmpleadoDireccion.getText();
            int empleadoSalario = Integer.parseInt(txtEmpleadoSalario.getText());
 
            miEmpleado.setEmpleadoId(empleadoId);
            miEmpleado.setEmpleadoNombre(empleadoNombre);
            miEmpleado.setEmpleadoApellido(empleadoApellido);
            miEmpleado.setEmpleadoContacto(empleadoContacto);
 
            int resultado = ControladorEmpleado.grabarEmpleado(miEmpleado);
 
            if (resultado == 1) {
                JOptionPane.showMessageDialog(null, "Nuevo empleado registrado.");
            } else {
                JOptionPane.showMessageDialog(null, "No se pudo realizar el registro.", "Oopps... ", JOptionPane.ERROR_MESSAGE);
            }
 
        }
    }

Me gustaría la opinión de ustedes referente al código que he puesto, si estoy implementando de forma correcta MVC y DAO, donde tengo mas duda es el Controlador, adicional a esto, yo manejo un Controlador por cada DAO.

Aclaro: Como se puede observar, en el código del botón "Guardar" que se encuentra en la Vista creo un objeto de tipo Empleado, llenando sus campos con los datos que recolecto del Formulario, luego invoco al metodo correspondiente del Controlador, al cual le paso como parámetro el objeto de tipo Empleado, tambien quiero decir que tengo un Controlador por cada DAO/DTO que he creado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Correcta implementacion MVC, DAO

Publicado por Tom (1145 intervenciones) el 28/01/2018 10:24:05
En apariencia es correcto. Ten en cuenta que estos modelos teóricos no están pensados para ser implementados al pie de la letra, son lo suficientemente abstractos para dejar margen a interpretaciones y, sobre todo, a mejoras de rendimiento.

En tu caso, siendo exigentes, la validación de los datos de entrada debería hacerse por el controller (Siendo imaginativos, es posible que la lógica de negocio dicte que se puede reservar un ID para un empleado del que aún no conoces sus datos).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Julian

Correcta implementacion MVC, DAO

Publicado por Julian (2 intervenciones) el 28/01/2018 20:12:56
Hola. Agradezco mucho tu respuesta.

Si no te molesta que te haga algunas preguntas en torno a tu respuesta:

1- La validación de los campos (Suponiendo que estemos en sintonia) seria verificar que estén debidamente diligenciados y con el tipo de dato correcto, si debo hacer una conversion de un tipo de dato a otro, hacerla: Esto como lo puedes ver lo hago en el del botón, en la VISTA. Como dices, esto podría manejarlo en otra Clase, siendo exigentes (Que es lo que busco) podria tener una Clase validación, a la cual loe podría pasar los datos recolectados en el Formulario, y esta se encargaría de realizar todas las verificaciones y luego pasarle esta información al Controlador.

2- Dices que estos son modelos que dejan cierto margen para interpretaciones, la pregunta que realice inicialmente de si estaba bien implementado mi MVC es porque en gran parte de los ejemplos que he visto que en el Controlador le implementan el ActionPerformed e instancian la Vista y el Modelo:

Fragmento de un ejemplo en internet:
1
2
3
4
5
6
7
8
9
10
11
12
public class Controlador implements ActionListener {
 private Modelo modelo;
 private Vista vista;
 private Double cantidad;
 
 public Controlador(Modelo modelo, Vista vista) {
  this.modelo = modelo;
  this.vista = vista;
 
  this.vista.pesos.addActionListener(this);
  this.vista.dolares.addActionListener(this);
 }

Como dije: Yo manejo el MVC de forma que

1- Creo los DTO que representan mis tablas en la BD.
2- Creo los DAO correspondiente por cada DTO.
3- Crea un Controlador por cada DTO (No se si esto correcto)
4- Creo la Vista (Usando Window Builder).
5- En el codigo del Boton instancio el DTO y por medio de los setters modifico sus atributos.
6- Invoco al Controlador, al cual le paso como parametros el objeto DTO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar