Tabla de Contenidos

Objetos y Validaciones

En esta unidad vamos a realizar ejercicios relativos a las validaciones.

Ejercicio01

Siguiendo el Ejercicio01 de la unidad anterior , pero eliminado todo el código relativo a las consultas, vamos a realizar las siguientes tareas.

Validaciones

Siempre que sea posible deberemos definir las validaciones usando el estándar JSR 303: Bean Validation.

NIF

De la clase NIF

Enfermedades

De la clase Enfermedades:

Coberturas

De la clase Coberturas

Seguro

De la clase Seguro:

AsistenciaMedica

De la clase AsistenciaMedica:

Todas

De todas las clases:

Cambios en los métodos

Hasta ahora todas nuestras clases han tenido únicamente métodos de set/get y los métodos de validación. Pero ésto nos puede llevar al antipatrón del modelo anémico. Con este antipatrón lo que hacemos es tener dominios sin lógica y toda ella se pone en una capa superior llamada “Capa de servicio (Service Layer)”.

Ya hemos cambiado un poco nuestro modelo para hacerlo menos anémico al añadirle todas las validaciones pero vayamos ahora más allá y organicemos los métodos de las clases para incluir más lógica en nuestras clases.

Todas

De todas las clases:

NIF

De la clase NIF:

Vemos cómo hemos alimentado 1) la clase NIF que aparentemente no era muy útil hasta ahora. Es decir, hemos añadido lógica a nuestro modelo.

Seguro

La siguiente tarea a realizar es añadir un campo a la clase Seguro para que calcule automáticamente la fecha de creación del seguro. Para ello deberemos incluir un “listener” para que rellene el campo.

Main

En la clase Main deberemos añadir este código.

        SimpleDateFormat sdfFecha = new SimpleDateFormat("dd/MM/yyyy");
        sdfFecha.setLenient(false);
        SimpleDateFormat sdfHora = new SimpleDateFormat("HH:mm:ss");
        sdfHora.setLenient(false);
 
        Seguro seguro = new Seguro("65234857A", "Santiago", "Sanz", "López", 23, Sexo.Hombre, false, 1, false, new Coberturas(false, true, false), new Enfermedades(true, false, true, false, null));
        AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Golpe en el brazo", "Madrid", "Fractura del radio derecho de la mano debido a golpe contundente con el suelo. Se escayola el brazo", TipoAsistencia.Hospitalaria, sdfFecha.parse("31/12/2013"), sdfHora.parse("11:21:45"), new BigDecimal("700.31"));
        AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Fiebre alta", "Alzira", "El paciente presenta cuadro alto de fiabre con deficultad para respirar. Se recetan antibioticos.", TipoAsistencia.Ambulatoria, sdfFecha.parse("27/02/2013"), sdfHora.parse("12:34:16"), new BigDecimal("81.14"));
        seguro.getAsistenciasMedicas().add(asistenciaMedica1);
        seguro.getAsistenciasMedicas().add(asistenciaMedica2);
 
        session = sessionFactory.openSession();
        try {
            session.beginTransaction();
            session.save(seguro);
            session.getTransaction().commit();
        } catch (javax.validation.ConstraintViolationException cve) {
            session.getTransaction().rollback();
            System.out.println("No se ha podido insertar el seguro debido a los siguientes errores:");
            for (ConstraintViolation constraintViolation : cve.getConstraintViolations()) {
                System.out.println("En el campo '" + constraintViolation.getPropertyPath() + "':" + constraintViolation.getMessage());
            }
        } catch (org.hibernate.exception.ConstraintViolationException cve) {
            session.getTransaction().rollback();
            System.out.println("No se ha podido insertar el seguro debido al siguiente error:");
            System.out.println("El valor ya existe." + cve.getLocalizedMessage());
        }

Ejercicio02 Optativo

Este ejercicio es optativo.

1)
lo contrario de estar anémico