Modelo PersonaDAO VO - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
📦 Proyecto:
mini-crud0(Fase 1) — ⬇️ Descargar ZIP · ☁️ Abrir en Codespace
Vamos a describir cómo organizamos la capa Modelo y por qué esta decisión nos va a facilitar el mantenimiento, la escalabilidad y la futura conexión a base de datos.
Trabajaremos con clases simples que encapsulan datos y comportamientos mínimos asociados. Al usar VO, vamos a transportar información entre capas sin pasar muchos parámetros sueltos, y vamos a estabilizar la interfaz aunque más adelante agreguemos atributos.
- Tendrá dos atributos (como venimos usando):
codigo(int) ynombre(String) - Incluye constructores, getters, setters y toString(). Con esto:
- Vamos a crear objetos persona de forma clara (p.ej.
new PersonaVO(101, "Ana")) - Vamos a mantener el contrato de datos estable aunque luego agreguemos, por ejemplo, email o fechaAlta
- Vamos a crear objetos persona de forma clara (p.ej.
- Vamos a minimizar cambios en capas superiores cuando cambien los datos
- Vamos a simplificar la creación y lectura de registros en cualquier controlador o DAO
El DAO centraliza el acceso a datos. En este tutorial, vamos a usar memoria (un ArrayList) para enfocarnos en el flujo MVC. Más adelante, vamos a cambiar la fuente de datos a una base real vía JDBC sin tocar el controlador ni las vistas; solo vamos a reemplazar o evolucionar el DAO.
Mantendrá una lista ArrayList<PersonaVO> y expondrá operaciones básicas:
-
agregar(PersonaVO vo)→ vamos a registrar una nueva persona -
getLista()→ vamos a recuperar todas las personas para la vista
El código lo dejamos a continuación, para tenerlo presente, en realidad ya lo hemos analizado en la unidad anterior, no tiene nada nuevo:
package modelo.dao;
import modelo.vo.PersonaVO;
import java.util.ArrayList;
public class PersonaDAO {
private ArrayList<PersonaVO> lista;
public PersonaDAO() {
lista = new ArrayList<>();
}
public String agregar(PersonaVO p) {
lista.add(p);
return "Persona agregada correctamente.";
}
public ArrayList<PersonaVO> getLista() {
return lista;
}
public boolean estaPersona(int cod) {
for (PersonaVO p : lista) {
if (p.getCodigo() == cod) {
return true;
}
}
return false;
}
public PersonaVO devolver(int pos) {
if (pos >= 0 && pos < lista.size()) {
return lista.get(pos);
}
return null;
}
public String eliminar(int codigo) {
for (PersonaVO p : lista) {
if (p.getCodigo() == codigo) {
lista.remove(p);
return "Persona eliminada.";
}
}
return "Persona no encontrada.";
}
public int cantidad() {
return lista.size();
}
public PersonaVO obtenerXCodigo(int cod) {
for (PersonaVO p : lista) {
if (p.getCodigo() == cod) {
return p;
}
}
return null;
}
public String actualizar(PersonaVO p) {
for (int i = 0; i < lista.size(); i++) {
if (lista.get(i).getCodigo() == p.getCodigo()) {
lista.set(i, p);
return "Persona actualizada.";
}
}
return "Persona no encontrada.";
}
}-
Vamos a aislar la lógica de validación y persistencia. Cuando cambiemos a JDBC:
-
agregar()hará INSERT en la base -
getLista()hará SELECT y mapeará filas a PersonaVO - El resto de la app no cambiará (controlador y vistas seguirán igual)
-
Cuando decidamos persistir en base de datos, vamos a mantener la interfaz de PersonaDAO, y solo vamos a cambiar su implementación:
- Registrar el driver JDBC (si no lo maneja un pool)
- Abrir conexión (
DriverManager.getConnection(...)o DataSource) - Preparar
PreparedStatementconINSERT INTO personas(codigo, nombre) VALUES (?, ?) - Ejecutar y cerrar recursos en finally o con try-with-resources
- Ejecutar
SELECT codigo, nombre FROM personas ORDER BY codigo - Recorrer
ResultSet, crear PersonaVO por fila, agregarlos a una lista y devolverla
- Encapsulamiento de datos en PersonaVO
- Separación de responsabilidades con PersonaDAO (acceso a datos) y el Servlet (flujo)
- PRG (Post-Redirect-Get) en el controlador para evitar reenvíos
-
Rutas relativas robustas con
${pageContext.request.contextPath}(EL) en las vistas - Contrato estable (métodos agregar, getLista) que nos permitirá refactorizar a JDBC sin romper el resto
Continuemos con CONTROLADOR- PersonaControladorServlet2
PersonaDAO · PersonaVO · Value Object · Data Access Object · ArrayList · agregar · getLista · eliminar · actualizar · obtenerXCodigo · Modelo MVC · encapsulamiento
🧠 Autoevaluación — Mini-CRUD con MVC
← PersonaControladorServlet · 🏠 Inicio · PersonaControladorServlet2 →
