Implementacion Patron MVC / DAO Java
Buena noche.
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:
/**
*
* @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:
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:
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:
// 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.
Actualizo (Aclaro): Como se puede observar, en el codigo del boton "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 parametro el objeto de tipo Empleado.
- Inicie sesión o regístrese para enviar comentarios
Lo veo bien
Se ve bien la estructura de tu código; yo generalmente lo manejo de la siguiente manera:- En el controlador yo declararía la instancia una sola vez de tipo privada(para no crear la instancia al DAO en cada método)
- El método listar lo dividiría en dos(ya que veo que lo usas para diferentes cosas)
- En mi caso el DAO siempre hago un implemets de una interface(para usar polimorfismo) para hacer una encapsulación del DAO; ademas de que se puede re implementar por los DAO's que tienen métodos en común.
En general también divido las clases de la misma manera(estructura del proyecto).
Cuando utilizo Spring tambien utilizo una capa de más(Service) entre en DAOI(Interface) y el Controller(Controlador).
Saludos.